LINUX.ORG.RU
ФорумTalks

Откуда растут ноги ненависти к php?

 , , , ,


1

0

В очередной раз натыкаюсь на лучи ненависти в сторону php, сам не программист и сабж тыкал только в составе готовых продуктов (wordpress, drupal, zabbix, freepbx) ну и самое «страшное» - это что для zabbix надо в конфиге php прописать правильный часовой пояс, а в остальном работает в фоне и норм (ну для высоконагруженных сайтов рекомендуют ставить связку nginx+apache, но это уже другая история, тут и с другими языами понадобятся оптимизации).

Из страшилок, которые про него слышал:

  • В одном из интервью кто-то и разработчиков ляпнул, что: «проще раз в день перезапускать демон php чем искать проблему почему он падает»
  • «Неполноценное ООП» - так про каждый второй язык пишут (оно вообще где-нибудь полноценное кроме smalltalk?), но подробностей не приводят
  • Жрет ресурсы как не в себя - а js/python/go на бекенде не жрут?
★★★★★

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

В РНР попросту оно (преобразование в число) смотрит на начало строки, если там есть число, его вынимает.

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

Я хочу доказать, что перегруженность операторов в JS еще хуже

Там нет перегруженности. Там есть слабая динамическая типизация, которая предсказуемо работает если ты в курсе тех немногих простых правил. Всё не так как в пистоне? Ну извини. Чей-то синдром утёнка - не проблемы языка.

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

Тут сортировка или typeof?

Это сравнение двух ссылок. Потому что typeof([]) == "object" Охереть, наверное, как сложно прочитать мануал по такому тупому языку как js, чтобы так не обсираться. Это же надо быть гением программирования. Проще целый втф сайт запилить.

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

80% всякого говна на вротпрессе, жубле, тележке и прочем друшлаге с посещаемостью 1.5 человека в неделю, добрая часть которого развёртывается автоматически и к нему даже птушник за еду не прикладывал руки.
И что?

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

Что «что»? РНР до сих пор доминирует в вебе, так будет ещё долго. А к развёртыванию ПТУшник руки не прикладывал, а вот к разработке плагина или темы вполне.

fernandos ★★★
()

Претензии к php того же вида, что и к винде.

Да, наверное, она не глючит, не падает, масштабируется и прочее, и прочее. Но мы помним, как всё начиналось, и нас туда не заманить, уж простите. Репутация - она такая.

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

Редкостный тупах. Хер автор не знает про Floating Point Maths, чем отличается typeof от instanceof, юзает sort без колбека и еще что-то удивляется. Как начинается вой про «1»+2, так каждый раз ничего кроме бездарности и неосиляторства

Я не понимаю, ты действительно пользуешься этим поведением JS в своем коде? Лично я уже давно пользуюсь линтером и TS, которые за прибавление строки к числу бьют по рукам.

чем отличается typeof от instanceof

typeof сломан, увы. Особенно по null. Но конкретно в приведенных примерах я бы сделал акцент скорее на разницу между «String('wtf')» и «new String('wtf')» — строка может быть как примитивным типом, так и объектом. Удачи писать функции, которые прожуют оба типа строк. У меня на этот случай запасена библиотечная функция проверки на строку, которую я не читал уже последний год.

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

Нет перегрузок и не ясно добавят ли их. Хотя, когда добавят, опять же поднимется вой, что везде втф и ничего стало непонятна. Так и придётся дрочиться с x.add(y.mul(z.div(c))) хотя кому оно в жс нужно.

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

Я лично писал форум на перле для своей группы в универе и у меня были большие проблемы найти бесплатный хостинг для перла. Приходилось писать в поддержку хостерам, пока не нашёлся один админ-доброхот. При этом для пхп такой проблемы не было вообще

Какой год?

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

Python

Крупные веб-фреймворки которые были на слуху под него стали появляться в районе 2005 года. WSGI это 2003-й. А до этого в основном всякие cgi/fastcgi в стиле perl, но в отличие от perl, python на тот момент казался мягко говоря… экспериментальным языком.

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

Стандарное «фу древнее говно».

лет 10-15 назад, когда еще не было моды «все писать на js» php на форумах ругали с теми-же тезисами про кривое ооп и жручесть

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

Ключевое слово «бесплатный». Бесплатные были в основном сугубо про статику. А на тех где была динамика, по ощущениям php встречался гораздо чаще perl.

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

Я не понимаю, ты действительно пользуешься этим поведением JS в своем коде?

Строки с числами я не складываю, по-моему нигде. Единственный вариант, когда надо какую-то короткую строку из 2-х аргументов типа "result:"+x. + для каста в число - использую.

Удачи писать функции, которые прожуют оба типа строк

Так не пиши их. Херач себя по рукам, когда передаешь объект или делай каст всего к строке. ДТ вообще не освобождает от необходимости знать что где какого будет в итоге типа. А то сравнивают херню с хернёй и получают в итоге херню. Вот чудо а! Язык наверное виноват.

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

parseInt(«0e0», 16);

224

А тут что не так?
парсит 16-ричное число. e0 это 224

Кстати, да, я сразу и не понял, что там происходит:

> parseInt('12e5')
12
> parseInt('123foo', 16)
4671
byko3y ★★★★
()
Ответ на: комментарий от byko3y

typeof сломан, увы

Он не сломан. Он предсказуемо выдает базовый тип. То, что это не соответствует ожиданиям и решаемым задачам - другой вопрос. Вообще, первое с чего я начал юзать js - это typechecker, который режет всю херню на входе в функцию, где и были все эти пляски с typeof, чтобы они потом не занимали половину кода.

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

ДТ вообще не освобождает от необходимости знать что где какого будет в итоге типа. А то сравнивают херню с хернёй и получают в итоге херню. Вот чудо а! Язык наверное виноват

Если ты 5 лет на одном JS пишешь — может быть ты всё знаешь и понимаешь. Но для менее опытных человек это просто бессмысленное иррациональное поведение. Которым оно на самом деле и является.

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

ВП никуда не делся и даже не собирается.

Пока его готовы ковырять за $300/месяц, он никуда и не денется.

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

Если ты 5 лет на одном JS пишешь

Нет, я пишу на нём около года. На любом языке есть втф. Для любого языка это решается одинаково - разбираться и читать мануал. Сеньёром с 500 лет опыта быть для этого не обязательно.

Но для менее опытных человек это просто бессмысленное иррациональное поведение.

Если ты привык, что в питоне всё по-другому, конечно тебе будет что-то другое дико. Если всю жизнь писать на дельфи, то тоже всё другое будет дико. Это нормально. Это не проблема языка.

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

почему именно PHP доминирует в вебе?

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

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

Кстати слеквание больше двух строк обычно создаёт где-то третью строку (на любом языке в вм - обычное поведение пула строк), так что складывать их вообще не смысла, лучше сделать join массива.

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

typeof сломан, увы

Он не сломан. Он предсказуемо выдает базовый тип

Нет никакого «базового типа», его нельзя пощупать и инстанциировать, есть лишь набор бессмысленных правил поведения typeof, которые нельзя понять — их можно только запомнить. Например, ты не можешь взять результат typeof и чисто полиморфно, не глядя на конкретный результат, например, создать еще один объект такого же типа. Как правило, в JS коде под каждый отдельный тип данных прописана своя уникальная ad-hoc обработка.

Например, в стандарте JS есть четкое разделение вещественных и целых чисел, но при этом никакого целого числа в базовых типах нет, это всё «number» — давай, поясни мне очевидность такого поведения. Да, примерно в 2014-2015 в браузерах массово появилось Number.isInteger, но до него было вот такое:

Number.isInteger = function(value) {
  return typeof value === 'number' &&
    isFinite(value) &&
    Math.floor(value) === value;
};
byko3y ★★★★
()
Ответ на: комментарий от fernandos

ВП никуда не делся и даже не собирается

Я только не могу понять, почему вокруг него столько народа трется? Что там мёдом намазано?

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

«сетевой эффект» (мы будем делать на пыхе, потому что легче будет найти программистов, потому что другие тоже пишут на пыхе)

Опять отвечаю, что сетевой эффект является следствием. Тому же лиспу никакой сетевой эффект не помог почему-то — напоминаю, что не так давно это был топ 3 по популярности ЯП вообще по всей IT индустрии.

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

Очень в этом сомневаюсь.

PHP: поставил денвер или что там нынче модно вместо него, закинул helloworld.php ему в document root, оно пыщ пыщ и работает. Скопировал на хостинг и оно опять же заработало.

Python: поставил питон, а что такое venv, а что такое pip, а что такое flask/django/fastapi роуты-модели-вьюхи-шаблоны? Ой, а как это в интернет выставить? А что такое VPS? А что такое линукс? А за бесплатно есть?

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

PHP: поставил денвер или что там нынче модно вместо него, закинул helloworld.php ему в document root, оно пыщ пыщ и работает. Скопировал на хостинг и оно опять же заработало.
Python: поставил питон, а что такое venv, а что такое pip, а что такое flask/django/fastapi роуты-модели-вьюхи-шаблоны? Ой, а как это в интернет выставить? А что такое VPS? А что такое линукс? А за бесплатно есть?

Разговор же шел про конец девяностых, максимум начало нулевых, не?

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

Например, в стандарте JS есть четкое разделение вещественных и целых чисел, но при этом никакого целого числа в базовых типах нет, это всё «number» — давай, поясни мне очевидность такого поведения

Не знаю, что там в стандарте, но double (который используется в жс для чисел) включает в себя подмножество целых чисел (вроде в районе +-2^53, если ничего не путаю).

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

Нет никакого «базового типа»

Есть. Читай мануал языка.

но при этом никакого целого числа в базовых типах нет

Вообще-то есть bigint.

давай, поясни мне очевидность такого поведения.

Потому все number в реализации js - double. isInteger - это просто просто костыль, который проверяет, что у double нет дробной и что это - не спецзначение.

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

Очень в этом сомневаюсь.

Как-то бодался с питоном, локально аргументы командной строки приходили в правильной кодировке, а на сервере вылезала ошибка, питон везде одинаковый, локально бубунта, на сервере центось. Так проблему нахрапом не возьмешь, в питоне там для юникода разные энкодеры-декодеры, пришлось сидеть, изучать. Решение не гуглилось. А в пыхе все примитивно (и в центоси бага нет).

Если писать правильно, то разница в пороге вхождения не большая, но можно писать неправильно, не осваивая ни ООП, ни фреймворков, ни шаблонизаторов, а в пистоне так не пойдет) Можно не зная пыха просто сесть и сделать что-то интуитивно, и оно скорее всего заработает.

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

Что там мёдом намазано?

Говном. И пхпшникаи за еду. Ну и PolarFox правильно говорит, что у похапе отлаженная инфраструктура и всё хорошо переносится.

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

страшным ... ЯП

Нет, он был простым удобным процедурным ЯП с динамической типизацией. Но он выполнялся ВНУТРИ HTML страниц внутри тега <? ?>.
Поэтому миллионы вебмакак строчили нечитаемые простыни на десятки тыщ строк смеси HTML с php процедурами и непонятным для не-автора результатом выполнения/отображения.

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

Да всё там понятно. Просто парсит до первой ошибки и выдаёт что напарсил. Поэтому, кстати, этой функцией для произвольных входных данных обычно не пользуются. Есть, к примеру, Number(string), который на ошибки выдаёт NaN.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.