Comments 82
Но PHP все же лучше других скриптовых языков подходит для разработки больших долго-живущих проектов, благодаря своей выразительности и достаточно простой структуре кода (хотя, Python для этого подходит гораздо больше).
PHP нигде не работает одинаково
Не могли бы вы раскрыть этот момент подробнее?
Поведение очень многих стандартных функций зависит от глобальных настроек в php.ini. И даже используемый синтаксис зависит от них. Нет возможности поменять эти настройки для своего кода, не ломая весь остальной код в проекте.
В целом, это не является проблемой на самом деле. Это больше надувание слона из мухи. Уже давно в пхп используется менеджер пакетов, который совмещает в одном проекте сотни библиотек, и всё ведь работает. Да и вообще, сколько лет я уже использую пыху — честно, еще ни разу не возникло подобной проблемы. Такое ощущение, что вы просто взяли подобные доводы из какой-то старой статьи про недостатки пхп, сами при этом не особо зная о реальном положении дел.
В общем, всё нормально на самом деле в этом плане в пхп. Это вообще не проблема, то что описывается проблемой — высосано из пальца и раздуто до слона.
Насколько я знаю, ini_set не меняет их для одного файла, а меняет глобально.
«Устанавливает значение заданной настройки конфигурации. Настройка будет хранить установленное значение пока выполняется скрипт. После завершения работы скрипта значение настройки вернется к исходному.»
http://php.net/manual/ru/function.ini-set.php
Такое бывает только на shared-хостинге, что при цене современных VPS/VDS — просто смешное ограничение (а очень хороший качественный shared даже дороже VPS/VDS — просто потому что там одна и та же базовая технология, но для shared админы хостера трудятся чуть больше).
Для более сложных систем есть Docker с его изоляцией и возможностью иметь свой индивидуальный файл php.ini для каждого куска вашей системы.
Ну, не в защиту предыдущего оратора будет сказано, но, тем не менее, возможность редактировать php.ini на некоторых shared-хостингах все-таки имеется. Например, у Ру-Центра.
Вы не управляете своим собственным php.ini?
Очень странный вопрос. Нет, когда я пишу бибилотеку, я не управляю php.ini окружения, где будет выполняться код. Я не знаю, какое будет значение у arg_separator.output
, short_open_tag
, allow_url_fopen
и еще тысячи настроек, которые влияют на выполнение кода.
Но конечно, если весь код проекта пишет строго один человек под одно окружение, это не проблема. Но статья вроде о PHP всерьёз.
Либо пишете так, чтобы работа вашего кода не зависела от этих настроек.
Во всем мире с этим как-то борятся, а в PHP — это принципиально невозможно, что ли?
Или вы думаете, что в мире вне PHP не существует настроек системы, не зависящих от разработчика ПО?
Вы либо описываете этот нюанс в документации к своему ПО
Ну вот автор одной бибилотеки написал одни значения, а автор другой — другие. А свой код я писал в расчете на третьи. И что делать?
Во всем мире с этим как-то борятся
Во всем мире, если есть какие-то настройки, они существуют на уровне модуля. Их можно поменять под себя, не ломая весь остальной код, запускаемый в этом же компиляторе или интерпретаторе.
Или просто настроены пессимистично — у всех все хорошо, а у одного меня все плохо.
Это не так.
Вы на практике встречали хоть раз нестандартное значение
arg_separator.output
?И мне вот сходу сложно представить, каким образом кусок лапши, зависящий от
short_open_tag
получил звание «библиотеки». Мы ведь сейчас не в 1998 году находимся, и даже не в 2006.Ну вот автор одной бибилотеки написал одни значения, а автор другой — другие. А свой код я писал в расчете на третьи. И что делать?Дело в том, что «разные настройки» это скорее не разные возможности, а экивоки в пользу кода со странностями.
Для яркого примера можно взять те же регистр-глобалс, которые можно было в настройках включать, а можно было выключать.
Если код написан правильно и современен — разные настройки проблему не создают. Если же код написан неправильно или несовременен — это проблема кода. Используйте современные либы, пишите современный код не используя спорных решений и все будет ок:)
На short_open_tag уже много лет никто внимания не обращает, стандартом де-факто давно стало использование полной формы записи, а для вывода начиная с версии 5.4 всегда доступно <?=.
allow_url_fopen — это, вообще-то, директива безопасности, и это вполне нормально, когда параметры безопасности задает владелец хоста, а не писатель библиотеки.
В общем, сдается мне, насчет «тысячи настроек, которые влияют на выполнение кода» вы слегка перегнули, и при внимательном рассмотрении этих настроек, которые стоит учитывать в коде, останется вряд ли больше десятка, да и те, как правило, связаны с безопасностью, что вполне разумно.
Как только мы уходим от shared hosting, необходимость в PHP отпадает в принципе.
Сразу появляется простор для RoR, Django, Go etc.
«А-а-а-а-а-а! У нас пол проекта зависит от сохранения состояния!»
«А-а-а-а-а-а! У нас слишком много данных бегает между приложением и memcache/redis/whatever для сохранения стейта, у нас гигабитный линк ложится!»
И так далее.
Слишком многие расслабляются и имеют потом огромные проблемы с разработкой и поддержкой. Кто-то справляется, кто-то нет. Тех, кто знают на что идут и планируют правильно на самом деле довольно мало — в основном те, кто уже опытные и скорее всего они провели значительное время в выбранной технологии, а не 2-3 года. Настоящие профи в любом языке и технологии это те, кто активно и серьёзно работали хотя-бы 5-7 лет.
Да и со временем значительное кол-во человек всё равно возвращаются к PHP, потому что работы на RoR, Python и Go не настолько много — на всех не хватает.
У меня есть щас клиент, которому девелоперы сделали магазин на Django & QShop — сейчас всё переносим на платформу на Symfony, потому что за относительно простые вещи начали выкатывать такие ценники, что ппц — клиентам оказалось дешевле заплатить нам за полный перенос магазина на новую платформу и заниматься её развитием, чем пытаться заниматься модификацией Django Qshop для добавления весьма тривиальных вещей.
Вот тут вы очень сильно ошибаетесь, ибо перезагрузить страницу, где куча состояния и взаимодействия, чтобы добраться до какой-то минифичи — это неземная боль.
Я что-то неправильно перевел?) Предложи свою версию перевода этого предложения, Грибок: I claim that PHP’s simpler “think; edit; reload the page” cycle makes developers more productive. Over the course of a long and complex software project’s life cycle, these productivity gains compound.
А что это меняет? Типа: чувак же на английском написал, он не может ошибаться?
P.S. А если взять популярную нынче тему с микросервисами, то микросервис обычно простое веб-приложение, которое не хранит кучу состояний, да и вообще, состояние это противоестественно для REST!
но 0123 == '0123foo' является ложью (хмм).
0 указывает на восьмиричную систему счисления. Так что здесь как раз все ок.
по сабжу, да, парни сделали с php казалось бы невозможное, они такие модники)
или же у них не было иного выбора для накопившегося легаси;)
Те кто утверждает обратное, просто застряли в 2000м или в своих причудах «нормальных языков».
Уровень вашей зарплаты зависит не от инструмента, а от квалификации.
И от понимания куда с вашей квалификацией вы можете податься.
С PHP ситуация следующая:
Есть много работы, но и есть много дешевой рабочей силы.
Это позволяет легко начать работать.
С Node ситуация такая:
Работы намного меньше, её еще надо поискать, но и рабочей силы меньше.
Поэтом средняя планка зарплаты — выше. Но найти работу сложнее.
Если вы стали профи PHP, то не совершайте ошибку — не конкурируйте с индусами за плошку риса. Не толкайтесь с ними локтями на дешевом рынке.
Идите в сложные системы — и заработок вас приятно поразит.
Но и знать нужно гораздо больше, чем хватает для работы с WP даже в запущенных случаях.
Для примера: мне пришлось вычищать 5.0 проект от всех ошибок, варнингов, фаталов и несовместимостей перенося всё на 5.6. Для этого нужно иметь опыт, мозги и знать что менялось от версии к версии, как, почему, и понимать как переписать то, что не поддаётся простому исправлению.
людям интереснее изливать свои печали в бложиках
… написанных на PHP, кстати
А я прочел и подумал, как хорошо, что это пэхэпэшное безумие позади.
В PHP 10 лет, годами наблюдал следующий процесс появления нового «php-программиста»:
1) студент, окончил абстрактный не технический вуз — в поисках работы.
2) 0 опыта работы, но в институте преподавали html — устроился работать контенщиком
3) пол года опыта работы: смог вставить countdown скрипт на сайт, заменил логотип в страничке. Все, через месяц уволился и устроился работать верстальщиком
4) прошел год — смог установить по инструкции плагин на <популярная cms на php>, требующий двух правок в php-файлах — все — бежит работать php-программистом.
И вот 2 года назад случилось чудо, очередной такой студент на моих глазах стал не php-программистом, а… внезапно открыл в себе талант backend-разрабочика другой технологии…
P.s. Быть может скоро и 1С-Битрикс перепишут… это же идеально, разрабатывать frontend и backend на одной технологии… можно нанимать меньше разработчиков, ведь явно любому frontend разработчику можно дать задачу backend'щика и наоборот. Эй эффективные менеджеры, где вы?
Или вы нам из прошлого века пишете?
Говорить "одна технология" в адресс node.js нельзя. Все почему-то забывают, что до ноды уже существовал серверный JS, но он не был так популярен. Вся хитрость в libuv, который позволяет творить настоящую магию, и JS тут лишь синтаксический сахар.
Мы получили огромный прирост производительности сохранив stateless модель для обработки запросов.
На тему ускорения есть ещё такая штучка как Kraken PHP Framework:
Kraken is able to emit millions of events and thousands of messages and connections per second using single container. It is scalable for multiple processes and threads, faster than traditional PHP approach and able to handle same or higher amount of connections that Node.js.
В amphp больше всего верю, потому что там ребята из php-internals и самое главное — с ними отлично получается лично контактировать хоть на гитхабе, хоть в твиттере.
Добродетели PHP
Первая, состояние.
Мне кажется это не отличительная особенность ПХП. В других языках есть способы получения такого же эффекта (константы, и т.п)
И то что ПХП стартует новый процесс на каждый запрос — называть «чистым состоянием» (или как там?) не очень верно.
Большинство программистов, которые немного игрались с PHP, знают две вещи про него: это плохой язык, который они никогда не станут использовать при наличии выбора
В любом языке можно найти что-то кажущееся странным, например как тут
сам php вполне себе норм, но вот часть тех, кто на нем пишут — это ппц Х_х. Вроде бы на дворе 2016 год, а на работе в проектах от другой команды до сих пор видны ошибки вида «cannot modify header information — headers already sent» или же ошибки выполнения sql-запросов (вообще только за то, что это видит пользователь на странице, нужно отрывать руки с корнями)
Потому мне кажется, что всех кто связан с php можно разделить на 2 лагеря:
староверы — это те, кто работает с 1-2 cms, могут написать под них модуль, при работе с другими системами не могут переключиться на другой подход потому что привыкли, в основном делают сайты-визитки и шаблонные простые интернет-магазины клиентам. Про автоматизированное тестирование не слышали или же считают что проверить вручную будет быстрее. Таких лучше не подпускать к даже немного сложным проектам. Пишут в стиле php4 до сих пор, развитием языка и новыми фишками не интересуются. Код пишется в каком-нибудь notepad++. Деплой — закинуть файлы через фтп и залить дампы новых таблиц через phpmyadmin.
приверженцы современного подхода — эти люди чтят psr, работают с современными фреймворками, знают как работает веб-сервер и могут спокойно сами его настроить оптимально в зависимости от проекта. Вполне себе пишут еще на нескольких языках или хотя бы имеют представление о других подходах. Пишут тесты и знают какие они бывают. Стараются использовать последние фишки языка. Для работы используют IDE (phpstorm, netbeans и т.п.). Деплой чаще всего автоматизирован.
Разделение весьма условное, да и промежуточные варианты тоже существуют, но вот сам язык позволяет использовать оба таких подхода — и старый, потому что куча кода написанная ранее должна продолжать работать, и новый, т.к. язык развивается и новые проекты лучше начинать используя последние возможности. Получается, что к php наверно всегда будут относиться с некоторым пренебрежением и презрением из-за староверов и недоучек, которые после установки вордпресса мнят себя обалденными специалистами, хотя сам язык и экосистема содержат все, чтобы писать понятный, быстрый и поддерживаемый код и эффективно решать задачи.
@ircmaxell so true. PHP is like Blizzard games - Easy to play, hard to master! :)
— Arvids (@Psihius) November 13, 2013
С тех пор я только укрепился в своём мнении — очень больщое кол-во разработчиков PHP знают плохо — отбери у них фреймворк или дай им легаси проект в котором нужно разбираться почти с голым PHP — они как новорождённые слепые котята становятся, приходится тыкать моськой в мануал, где прямым текстом написаны очевидные вещи. Т.е. люди мануал если и читали, то вскользь.
Асинхронный curl'инг на локалхост (или даже другой веб-сервер) предоставляет неразделяемый (shared-nothing), копирование-в/копирование-из подход использования параллелизма.
Интересный способ согласования предложения.
Буду рад, если вы предложите более правильный перевод данной фразы, так как я действительно не очень понимаю, как правильно ее перевести.
— Кстати у переводов должна быть соответствующая плашка.
Даа, как хорошо вы перевели. Намного более понятно получилось. А что за плашка должна быть соответствующая? Пояснение, что эта статья — перевод? У меня есть только возможность указать, что эта статья является туториалом. Как у других — не знаю)
Но вот эта «статья» не понятно, какую должна мысль донести. Холивара ради? И так хватает постоянных метаний фекалий из одного стана в другой. Неужели до сих пор люди не понимают, что к любому инструменту нужны «руки». А то потом разгребаешь божественный код адептов ror/django…
Поддался общей истерии и написал комментарий…
Ну, отчасти да, ради того чтобы еще раз объяснить народу, что пхп решает задачи. До сих пор у массы программистов куча предубеждений и вирусов насчет него, и эта статья как антивирус для них.
Вторая причина — рассказ о Hack, статической типизации в мире пхп.
В статье явно уклон идет больше на Hacklang, и на самом деле, после беглого знакомства — действительно не плох.
Собственно, может кто уже юзает реально в prodaction эту штуку, расскажет где можно захостить и какие подводные камни есть? Насколько я понял с оф.сайта под windows реализации нет?
Принимая PHP всерьёз