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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.