LINUX.ORG.RU
Форум — Talks  

всесторонняя критика PHP

 ,


0

1

Нашел прикольную статью с всесторонней и аргументированной критикой языка программирования PHP - http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/ Рекомендуется к прочтению всем, кто собирается изучать этот ЯП, с целью направить их энергию в более полезное русло.

Маленький отрывок для Ъ:

Что делает вот этот код?

  @fopen('http://example.com/not-existing-file', 'r');
  • Если PHP был скомпилирован с опцией --disable-url-fopen-wrapper, он не будет работать (при этом документация говоря «it won't work» не поясняет, каким именно образом он не будет работать: вернет null, выбросит исключение, и т. д.)
  • Если allow_url_fopen в php.ini выключен, то код тоже не будет работать, при этом совершенно непонятно как именно.
  • Из-за @ предупреждение о несуществующем файле не выведется
  • Но если scream.enabled включен в php.ini, то предупреждение выведется
  • Или если scream.enabled включен через ini_set.
  • Но оно не выведется, если задан неправильный error_reporting
  • Куда именно выведется предупреждение сказать нельзя, так как это зависит от опции display_errors в php.ini. Которая может быть переопределена через ini_set

Таким образом, не зная опций компиляции, системных настроек и настроек на уровне приложения, нельзя сказать даже приблизительно как себя поведет простейший кусок кода.

Update: Полный перевод статьи на русский - http://habrahabr.ru/post/142140/

★★★★★

Последнее исправление: provaton (всего исправлений: 1)
Ответ на: комментарий от KRoN73

Вот любимый аргумент пхпшников - существует еще хотя бы один язык, в котором данная конкретная фича реализована не менее хреново чем в пхп.

provaton ★★★★★
() автор топика
Ответ на: комментарий от provaton

Стоп, стоп. Это имел ввиду не естественное поведение для сферического языка, а естественное для php (и любого другого языка где чтение несуществующей переменной не приводит к ошибке). То что сам такой подход не очень хорош - это уже совсем другой вопрос.

Однако кто-то писал выше, что без использования global PHP создаст локальную переменную. Так вот - я так и не увидел, что чтение из несуществующей переменной создало ее. Но главное не это. По мнению автора, PHP должен был считать значение глобальной переменно. Так вот я о том, что это было бы еще хуже.

Suntechnic ★★★★★
()
Ответ на: комментарий от provaton

Где звезду потерял?

Сразу после того, как получил 4-ю звезду,
я спросил в Desktop/ - чем отличается Фотошоп от GIMP, в ключевых моментах.
Зарезали за провокацию флейма. Хотя, пять пунктов (отличий) belous_k_a успел выдать.

pacify ★★★★★
()
Ответ на: комментарий от provaton

Вот любимый аргумент пхпшников

Любая особенность любого языка — относительна. И поэтому обвинить, что то или иное в языке криво, можно только в сравнении с другим. И в этой теме такое постоянно происходит, кстати. Соответственно, чтобы убедить, что данное поведение реально из вон плохое, нужно показать, что лучше сделано во всех популярных альтернативах. Если в каких-то альтернативах ситуация не лучше, то и разговор получается уже не о чём.

Это касается вообще любых языков, если непонятно. И точно также от _некорректных_ обвинений открещиваются защитники любого другого языка :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Зачем вообще обвинять языки? Не нравится - не пользуйся. Мне вот креольский не нравится - так я его и не собираюсь учить (хотя французский нравится, но его я тоже не собираюсь учить).

Suntechnic ★★★★★
()
Ответ на: комментарий от Suntechnic

Зачем вообще обвинять языки?

Ну, есть люди, которых хлебом не корми, но дай чужой инструмент поругать :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Жаль кнопочки убрали. Спасибо тебе мудрый человек. Истину глаголишь.

visual ★★★
()
Ответ на: комментарий от Suntechnic

Слава богу, я пользуюсь не вменяемым языком. А список вменяемых не приведете? Ну что бы знать где грабли зарыты. Я так понимаю он не должен быть большим...

В списке будут все языки, поддерживающие лексические замыкания. Так что список большой будет, а тикля увы в нём нет.

Hjorn ★
()
Ответ на: комментарий от KRoN73

PHP Notice: Undefined variable: a in Command line code on line 1

В этом месте должно вывалиться исключение, иначе несерьезно это. Хотя тогда наверно половина сайтов сломается, так что можно понять разработчиков. PHP не повезло, он слишком рано стал очень популярным.

Hjorn ★
()
Ответ на: комментарий от Hjorn

Хотя тогда наверно половина сайтов сломается

Ну, методично в этом направлении идут. Вот, register_globals отменили. Дойдёт очередь и до NOTICE → FATAL когда-нибудь :)

А если так критично, то можно самому повесить обработчик ошибки, который по NOTICE будет вызывать фатальную ошибку. С логгированием и выдачей юзеру «Извините, у нас проблемы» :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Hjorn

Не просветите, зачем оно мне в тикле. Если честно я правда не понимаю. Какие-такие оно дает мне преимущества коих я не достигну при помощи upvar и eval.

Suntechnic ★★★★★
()
Ответ на: комментарий от Suntechnic

Хотя upvar конечно зло. Если мина вообще может быть злом вне контекста сапера.

Suntechnic ★★★★★
()
Ответ на: комментарий от KRoN73

KRoN73

Так в чём фигня выражается-то?

ИМХО что в пхп, что в перловке, ООП смотрится как нелепый костыль для кобры. Зачем кобре костыль, если у неё отродясь ног не было? Что касается C/C++, то в первом ООП изначально было, на нём можно писать в стиле ООП (хотя это выглядит ужасно), ну а в C++ просто добавили синтаксического сахара, что-бы этот ужас убрать (с глаз долой. Как например таблицу указателей на виртуальные функции, которую вообще-то можно и в C структуре сваять). ООП в C++ это не костыль, это что-то вроде плавников у рыб, которые развились в нормальные ноги.

drBatty ★★
()
Ответ на: комментарий от Hjorn

Hjorn

PHP Notice: Undefined variable: a in Command line code on line 1

В этом месте должно вывалиться исключение, иначе несерьезно это.

ну это уже идеология php - скрипт должен хоть как-то отработать, даже если случилось СТРАШНОЕ. А юзер не должен видеть этих notice'ов. Он и не видит. Однако в лог они пишутся. На тестовом сервере (быдло)кодер их тоже (не)видит. Т.ч. проблема не в ЯП.

drBatty ★★
()
Ответ на: комментарий от Hertz

Hertz

C++ надо было не переделывать, а просто закопать.

ниасилил? сочувствую.

drBatty ★★
()
Ответ на: комментарий от drBatty

ИМХО что в пхп, что в перловке, ООП смотрится как нелепый костыль для кобры

В третий раз спрашиваю — в чём это выражается?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

KRoN73

ИМХО что в пхп, что в перловке, ООП смотрится как нелепый костыль для кобры

В третий раз спрашиваю — в чём это выражается?

в четвёртый раз отвечаю: вы, видимо считаете, что ООП == какая-то дополнительная фича, например новая функция/библиотека. А я считаю, что это нечто принципиально иное, и если ЯП изначально был без ООП, то это ООП там будет выглядеть как кривой, и искусственный костыль.

drBatty ★★
()
Ответ на: комментарий от drBatty

Ну что же, мне остаётся только в четвёртый раз спросить: в чём _конкретно_, на _примерах_ проявляется костыльность ООП в PHP. Ну, хотя бы в сравнении с той же Java (надеюсь, то, что Java изначально разрабатывался как ООП-язык вполне очевидно, нет?)

Или Вам привести примеры «нелепой костыльности» не получается и остаётся только на непролетарское происхождение обвиняемого ссылаться?

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.