Я принял решение использовать PHP как часть моего общего стека, наряду с Ruby, JavaScript и Python. Основная причина в том, что было много отличного программного обеспечения, написанного на PHP, и я хочу использовать его. Однако после того, как я оставил мир PHP для Ruby, а затем вернулся к нему, я вижу много раздражающих мелочей, которые беспокоят меня в PHP. В этой статье я рассказываю о некоторых из них.
Но следует отметить, что PHP далеко не так уродлив, как шрифт. PHP - это старый язык, родившийся до современного Интернета и предназначенный для легкого использования. Не для строительства монолитов бегемотов. По крайней мере, у PHP есть оправдание для неправильного синтаксиса. С другой стороны, Typescript якобы был создан, когда уже существовал современный интернет. Нет оправдания тому, что шрифт должен быть таким же уродливым, как и он. Это очень печальная новость, все. Боюсь, будет целое поколение программистов, которые думают, что уродливые языки - это нормально. Конец мини-ранту.
Теперь о том, что мне не нравится в PHP.
уродливые петли
Если я напишу:
foreach ($collection as $block => $region) { ... }Обратите внимание на токен «=>». Обычно вы видите это в словарном назначении ключевого значения, но здесь это означает противоположное, деструкцию, а не назначение. Имеет ли смысл использовать для этого тот же токен? Думаю, нет.
Также обратите внимание, что при чтении вышеприведенной строки вы должны прочитать середину, а затем вернуться к чтению начала. Не читается: foreach ($block => $region in $collection) {...} . Если я просто прочитаю первую половину и остановлюсь, то информация бессмысленна: на каждый (коллекция...) Может быть, php-люди привыкли к этой мерзости, но я нет, и я тем самым указываю, что это плохой синтаксис.
Сравните это с Python:
for key, value in my_dict.items(): print(key, value)Сравните это с рубином:
collection.map { |key, value| print(key, value) }Элегантный, да? Элегантный на всех языках, кроме php.
Увлекательный разделитель пространства имен
Что это значит?!
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\Entity\EntityFormDisplay;О, обратный слэш... просто обычный персонаж сам по себе. Это глупо, я видел это и вернулся к отказу от использования php в течение года. В реальном мире, в Linux, задняя коса ускользает от следующего персонажа. Задняя коса никогда не бывает одинока, и следующий персонаж тоже особенный персонаж! Вы можете избежать специальных персонажей, таких как новые линии и знаки доллара, вы можете избежать вещей, которых не существует, вы можете избежать половины того, чего еще не существует - и это будет надежно и портативно. Я говорю об уникоде: вы можете написать \uXXXX и закодировать часть многобайтового символа, который не был добавлен в набор, используя огромную силу обратной реакции.
В некотором смысле, обратная реакция - это мета-мета-персонаж, он более особенный, чем бэктик или знак доллара, он, возможно, самый особенный персонаж из всех. PHP использует его для чего? Ни за что, только для того, чтобы отделить вещи. Отдельные вещи с запятой.
На самом деле, в реальном мире Linux, обратный слэш избежал бы следующего персонажа, и, например, «Drupal\Core» стал бы просто «DrupalCore», так как выход из «C» является не-операцией и приводит к тому же «C».
Сравните это с рубином:
class Very::Simple::Namespace {}По сравнению с Python:
from utils.text.unicode import encodeЕдинственный уродливый — это php.
Ошеломляющий синтаксис массива
Что же это такое в мире?!
$person = [
'name' => 'Alice',
'age' => 30,
'city' => 'Austin',
];Квадратные скобки?! Но это не список. Все в мире, кроме этих парней, используют «[]» для представления списков и «[]» для представления наборов / словарей / пепла. Не заставляйте меня начинать...
Сравните с рубином:
person = {
name: 'Alice',
}
person = {
'name' => 'Alice',
}По сравнению с Python:
person = {
"name": "Alice",
"age": 30,
"city": "Austin",
}Опять же, PHP является уродливым.
Я обновлю список, как только увижу или вспомню другие раздражающие вещи. Но пока - надеюсь, вы сможете увидеть, как у людей сильные языковые предпочтения. И это был просто синтаксис, а не отражение, не стандартная библиотека или другие соображения. Я думаю, что рубин - это бесконечно более элегантный и приятный язык, и меня огорчает, что рубин не получает достаточного использования от мировых программистов.