Comments 286
Как вы думаете, есть ли своя ниша у php, и в чем она заключается?
На мой взгляд везде, где не требуется GUI без браузера, и не слишком критична скорость выполнения.
Я думаю, все дело в аргументации. Когда речь идет о нише языка программирования, я полагаю, нужно учитывать его особенности. Я бы выделил следующие особенности PHP:
- Изначальная ориентация Расмусом на web-разработку, что во многом определило курс развития языка.
- В экосистеме PHP доминируют библиотеки нацеленные именно на веб-разработку
- Низкий порог вхождения в язык (легко найти разработчиков, много уже написанных продуктов, библиотек)
- 99% внедрений используют PHP для выполнения кода без сохранения состояния внутри интерпретатора (параллельно исполняемые экземпляры почти не влияют друг на друга кроме как через кеш или персистентное хранилище данных)
- Большое количество услуг PHP-хостинга, высокая ценовая конкуренция в этом сегменте
Все это вместе (и некоторые другие факторы тоже, конечно) и определяют нишу этого языка сегодня.
GUI на PHP не пишут не потому, что язык для этого неудобен или не подходит (есть расширения PHP для разработки GUI), а потому, что экосистема PHP ориентирована в основном на веб. Попробуй сделать что-нибудь сложнее калькулятора на PHP и сразу будет понятно, что нужно написать с нуля все контролы, реализовать, скажем, датабиндинг, поскольку функционала стандартных окажется более чем недостаточно.
Производительность имеет достаточно мало влияния на применение языка. PHP один из самых быстрых скриптовых языков, но тем не менее, в научных расчетах, обучающихся системах Python его превосходит по широте использования из-за наличия развитой экосистемы в этом сегменте.
Об уровне — это чистая правда. Я не веб-разработчик, но когда в старые времена для каких-то целей нужно было создать сайтик (по сути простой веб-интерфейс для доступа к БД в локалке), я это сделал на «php4» вообще не задумываясь — настолько все было просто.
Что там творится теперь — мне непонятно. Уровень абстракции очень сильно вырос, количество абстрактных прослоек выросло, и это привело к тому что я «не чувствую» ни сложности алгоритмов, ни низкоуровневой структуры программы. То есть современные фреймворки работают, но их работа превратилась в некую магию, для полного понимания которой нужно, вероятно, глубоко изучить внутреннюю структуру фреймворков на самом низком уровне. Все ли к этому готовы?
Все руководства по фреймвокам сводятся к написанию «hello-world» сайтов практически без объяснения внутренней работы самого фреймворка. Я после безуспешных поисков такого глубокого руководства пытаюсь сам разобраться понемногу в свободное время, может статью напишу:)
Нормальный, компилируемый, со статической типизацией, лишенных кучи ненужного синтаксического сахара.
http://www.tiobe.com/tiobe-index/
Я хочу чтобы в мейнстриме появился нормальный компилируемый язык со статической типизацией для веб-разработки
Существует.
И уже как несколько лет в мейнстриме у серьезных разработчиков.
В т.ч. в production очень серьезных контор (как Dropbox, к примеру).
Называется Go, golang.
Да, конечно что-то есть, можно хоть на си писать сайты… но это не распространено. А распространены именно динамически типизированные языки php, python, ruby и js. Интересно почему?
Потому что вы просто не знаете об использовании в крупных веб-проектах Go, Java, Scala, C#.
Почему не знаете — потому что не сталкивались.
Почему не сталкивались тоже понятно — ведь хоумпейджи на них крайне редко пишут.
Я не веб-разработчик, но когда в старые времена для каких-то целей нужно было создать сайтик (по сути простой веб-интерфейс для доступа к БД в локалке), я это сделал на «php4» вообще не задумываясь — настолько все было просто.
Что там творится теперь — мне непонятно.
Ничто не мешает и теперь на php7 накидать. Более того, и ваш старый код скорее всего будет работать.
Конечно, накидать нечто подобное по новой не составляет проблемы, но лично мне подобные изменения (углубление в ООП) в РНР нравятся.
Ну кроме того, что он не поддался хайпу?
Запросы выполняются? Все, отлично.
https://habrahabr.ru/post/316506/
А какая разница, что человек использует mysql, кроме mysqli?
mysql_* функции удалены из php7+. А так ничего.
Запросы выполняются? Все, отлично.
все завязано на устаревший функционал? Все отлично.
Я написал обертку для вызовов mysqli_ ф-й из mysql_ функций для php7 и продолжаю писать в привычном стиле :)
продолжаю писать в привычном стиле :)
Если всю работу с данными вы изолировали, и SQL не размазан по всему проекту, то "карать" действительно незачем. Особенно если в "привычный стиль" не входят штуки вроде "интерполирую ка я айдишку в строку с SQL". Ну мол prepared statements, параметры и все такое...
А распространены именно динамически типизированные языки php, python, ruby и js. Интересно почему?Потому что скорость разработки на них выше. Достаточно исправить исходный код и тут же получить результат, в отличии от компилируемых языков, где много времени тратится на саму компиляцию.
Я понимаю что ядро linux будет не 15 минут компилироватся(хотя возможно я ошибаюсь и это происходит быстрее), но давно уже прошло время когда те же самые java/C#/C/C++ компилировались.
Для примера, если вы почитаете интервью с разработчиками Facebook, то они как раз и упоминали большую скорость разработки, когда мотивировали отказ от других языков.
P.S. даже если проект будет собираться 1-2 минуты, это уже долго, потому что таких минут для всей команды будет набираться на полчаса-час в день на разработчика, а в переводе на суммарные затраты времени будет очень большим.
P.P.S. Да и зачем компилирование? Скорость скриптовых языков достаточно велика. Качество кода? С новыми версиями PHP можно писать надёжнее. А если будут весомые аргументы, то и сейчас есть компилируемые языки, которые можно использовать. Тот же Nginx не на PHP написан.
С компилируемыми языками тут вопрос стоит не о скорости(о ней меньше всего парятся), а о качестве кода, т.к. в динамических языках или позволяющих использовать динамику очень сложно писать большие ынтырпрайз приложения) т.к. требования к качеству и безопасности кода там выше.
О качестве.
if (a = b) сработает также хорошо, как и if ($a = $b). От этого защитит разве что статический анализатор или warning компилятора (если он умеет). А стат.анализаторы есть и для PHP.
Возможностей же выстрелить в ногу, что на С, что на С++ и других компилируемых предостаточно. И скриптовый язык может быть даже безопаснее, потому что он в редком случае завалит(?) систему, приложение же на компилируемом языке может вызвать «BSOD».
Я пришёл в PHP из мира С и С++ и понимаю, когда говорят о качестве компилируемых. Банально, их изучение даёт больше понимания того, как работает железо, на котором всё это исполняется. Но на PHP тоже можно писать очень качественный код, особенно обзаведясь типизацией.
SQL
Если в чистом виде SQL по вашим убеждениям не является достаточным чтобы являться ЯП, то есть ещё хранимая логика.
врут. Сутки собирается webkit-gtk, нормальные браузеры собираются за пару-тройку часов.
Зачем, если в вебе можно «херак херак и в продакшн», и оно будет работать.
Помню дикую боль при разработке веб-морды на старой Java, когда для каждой долбаной кнопки нужно было создавать свой класс с единственным перегруженным методом онклик. А потом создавать экземпляр этого класса. Зачем?
Это всего лишь вопрос синтаксического сахара для удобства разработки. Принципиальных проблем тут нет. Что касается именно Java, то это консервативный язык. Он долго перенимает инновации, поэтому к нему легко придираться в таких холиварных обсуждениях.
хотя тут не уверен, возможно есть и под другие платформы уже свои костыли
Есть как и конвертирование Java проекта с Андроида на Аpple, так и просто JVM для Аpple.
Ну, насчет десктопа спорно. По-моему swing уже устарел морально. javaFX по слухам загибается тоже.
Нет, можно делать и десктоп, просто на Java предпочитают делать вебприложения, так как обычно Java используют в бизнес секторе, а там порталы удобнее десктопов. В принципе большинство задач можно решить с помощью вебприложений, если приложение только для win, то лучше взять что-то вроде C#, если приложение требуется кросплатформенное, то пойдет и Java.
Слой REST/JSON-сервисов в web-приложениях, если удастся вывести PHP из сферы действия Apache/Nginx и поднимать как standalone сервер (типа ExpressJS, Tomcat/java, WSGI/python). Ну или в рамках Apache/Nginx запускать PHP-приложения со стадиями инициализации приложения, обработки запросов, завершения приложения (типа servlet'ов). Делать вот это все на каждый GET/POST запрос с web'а — весьма расточительно, не говоря уже о сборке HTML'а на стороне сервера. В web-разработке позиции PHP весьма сильны, но с фронта всех теснит JS — остается back.
Да, очень похоже на то, что нужно :)
<?php
require 'vendor/autoload.php';
$i = 0;
$app = function ($request, $response) use ($i) {
$response->writeHead(200, array('Content-Type' => 'text/plain'));
$response->end("Hello World $i\n");
$i++;
};
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket, $loop);
$http->on('request', $app);
echo "Server running at http://127.0.0.1:1337\n";
$socket->listen(1337);
$loop->run();
Есть еще altorouter
Из минусов — на данном этапе он требует php-cgi для воркеров, что я считаю недостатком. Я понимаю конечно почему так было сделано — поскольку в некоторых дурных скриптах стоят проверки на SAPI, но если хочется именно через CLI — то надо писать свой менеджер процессов.
Мне кажется, что это самый развитый проект http-сервера на PHP
вывести PHP из сферы действия Apache/Nginx и поднимать как standalone сервер (типа ExpressJS, Tomcat/java, WSGI/python)
uWSGI с php-плагином очень к этом близок
И вот впервые встретил хотя бы кого-то, кто сказал, что вернулся с рельсов на php и о рельсах не хочет вспоминать!
Сейчас, соглашусь, переходить сейчас чуть проблемнее ибо те же фреймворки, только иначе.
В тот же .NET, например, порог входа с точки зрения написания кода не особо выше, но всё равно зачастую новички могут не сразу врубиться, что и куда надо положить, чтобы страничка открылась.
Недавно проскакивала статься про delphi, и там было правильно подмечено, что огромное число разработчиков на delphi перешли на сторону .net. Те же кто испытывал «теплые чувства» к unix перешли на другую сторону и выбрали perl, php.
Про себя скажу, что я много лет проработал администратором разных unix, поэтому и php. И кстати python с django, но это спустя много лет, после php4 и затем php5 (как было правильно замечено, что 4 и 5 это разные, если не языки, то принципы и подходы). Сравнивать, что лучше python (или отдельно django) или php считаю не уместным, всё хорошо где-то на своём месте.
И еще вектор развития задаёт учеба. Раньше в институтах изучали pascal+delphi. Сейчас появилась тенденция преподавать python.
Еще роль играет география. Если на php вакансии есть везде, то c# это Москва и филиалы. А разные местечковые компании выбирают 1с-bitrix.
Так и получается, что php универсальнее и переживет много других языков, хотя идейным вдохновителем для других не был и не будет.
Поэтому никаких разумных альтернатив PHP для отдачи по HTTP кучи бессвязной фигни, не объединённой в общее понятие «приложение», я не вижу.
— «Не хочу подзаработать и сделать маленький сайтик на wordpress, там делов-то на пару часов»
или:
— «Как? Ты не знаешь „1С-Bitrix!?“
Php очень сильно расслоился на крайности между cms и symfony с doctrine. Ну и люди, там мечутся соответствующие, я бы еще третий лагерь, где-то между выделил — YII. Ничего не имею против, отличный инструмент, прям даже уникальный получился.
— порог входа ниже чем у того же symfony
— следует из предыдущего, удачно выбранные инструменты/функционал: приятный AR, ненавязчивый DI, хорошо и понятно структурирован внутри, без всякий сервисов, бандлов. Но если требуется, можно и закопаться в более advanced решениях
— много и очень много виджетов и плагингов, причём как низкоуровневых, так и для фронтенда
— достаточно хорошая поддержка и развитие, здесь же много информации в интернете
Ну и от себя, я очень не люблю виджеты, но они очень экономят время разработки. Мне не нравится структура проекта по умолчанию, но ее можно менять.
Но беспокоит то, что не знаю лучших практик и рискую вляпаться. Беспокоит, что не знаю библиотек, расширений и, скажем так, практики их применения т.е. какие там есть неявные проблемы, нужно ли заранее к этому свои обёртки написать или можно считать «верным клинком». Не знаю кода фреймворка «в глубину» и сложности которая стоит за вызовом каждого метода.
Толкового описания таких вещей не попадалось, а сам могу это всё приобретать ещё год-два.
Идеально в твоём случае попасть в хорошую команду, где есть люди с понимание и опытом.
Вот я не очень люблю Yii, из за того что мне кажется он уж слишком мало пропагандирует best practics программирования, типа SOLID.
При этом я не могу сказать что, например, Symfony это прям то что нужно что бы эти практики постичь.
Идеально на мой взгляд писать код так что бы он не зависил сильно от фрэймворка. Т.е. когда вся бизнес логика заключена не в ActiveRecord модели, как часто бывает как раз в Yii, и не в контроллерах, а в отдельном месте, и уже для этой логики используется обвязка для использования фрэймвоком этого когда.
А вот как это написать, может сказать только опыт и хорошая команда, в которой такие вещи можно обсудить.
А с командой печаль. Сейчас, можно сказать, один работаю (если клиента, ПМ и маркетологов не считать). Иногда перед кем-то из удалёнщиков в роли живой документации и справочника «а как тут вот такое сделать?» выступаю, вот и всё взаимодействие. Можно было бы место работы сменить, да не хочется, полюбил уже всё. Так что как всегда всё самому.
Как жаль что люди не собираются в уютных чатиках и не филосовствуют на тему "как делать хорошо".
Можно и по PHP такой создать, но мне кажется там бардак будет.
https://telegram.me/prophp7 — тут душевненько. Ну и там есть смежные ссылки еще на чатики забавные.
пока в PHP можно писать как хочешь(не используя ООП и кучу других печенек), то поток «вечных новичков» в PHP не уменьшитсяНас всегда удивлял этот «парадокс».
Хочется сложностей? Выбирай яву и ныть по поводу наличия новичков не надо будет.
Что за то ли эгоизм, то ли садомазохизм — выбирать язык где новичков по определению много, а потом ныть по поводу их наличия и требовать «усложнить» язык, что бы новичков оттуда выгнать?
Типичное «залез в монастырь со своим уставом». Ну хочешь сложного языка — выбирай сложный, зачем выбирать простой и прогибать его под себя требованиями усложнить?
p.s.: «уехать никак» это всегда не более чем повод остаться, когда уезжать не хочется. Если Вы конечно не в колонии поселении отбываете.
Фриланс это тоже удаленная работа, а в фрилансе и без опыта можно получить проект вопрос только в оплате.
Желательно еще дать эти проектики на ревью (они ж для себя, не под NDA). Благо нынче сложностей с этим нет.
Если цель зарабатывание на фрилансе, то рефакторинг это лишнее.
Смотря что подразумевать под "рефакторингом". Речь идет о поддержании уровня технического долга на нужном уровне. Если говнокод изолирован — он не приносит много боли. А без опыта "изолированности" не выйдет.
Правда у меня школа хорошая была
Я рекомендую вам, когда вы даете подобные советы, начинайте с этого. Когда опыт есть и есть понимание "что есть хорошо и что есть плохо, и когда нужно делать плохо" — это одно. А когда новичку говорят "да пофигу на качество главное фигачить побольше" потом начинаются проблемы.
Именно о том что бы "натаскать" и был мой совет. Написали проект, скинули на ревью. Или попросить какого-нибудь человека "внести изменения в требования" что бы проверить насколько код плох. Что бы не услышать потом от заказчика "почему так долго? Почему так много багов? Это ж просто кнопку добавить нужно было!"
почему на хабре эту биржу не любятНесколько взломов с раскрытием данных, неадекватное разрешение СБР, конские тарифы на всё, мониторинг личных сообщений администрацией, безосновательные задержки выплат денег и так далее — можете почитать на фл.ру в блогах отзывы пользователей.
Ах да, не можете, когда пошло много объективных негативных отзывов в блогах — их снесли на фиг безвозвратно.
Раскрытие личных данных сыграло роль не самим фактом раскрытия, сколько полнейшим бардаком снизу доверху который этот взлом вскрыл.
А для нас лично мониторинг ЛС администрацией, при чем не особо скрывавшийся, поставил жирнющий крест на проекте.
Хотя в свое время мы были достаточно активными его пользователями.
есть пул постоянных клиентовТак и работать с ними напрямую, а не через фл.
необходимости, по крайней мере сейчас, уходит на запад нетВ нулевых не было смысла работать на россию, на западе платили на порядок больше. Постепенно уровень оплаты выровнялся, где-то к 8 году был достаточно близок, но 14 год отбросил российские уровни оплаты в 2 раза.
Да, я в курсе про цены. Но как выше писал, мне было очень сложно на Upwork конкурировать с индусами, а всё что в итоге предлагали даже у нас стоит дороже. Поэтому для себя особого смысла работать на запад не вижу, если только найти нормальную компанию и работать чисто на нее удаленно.
Именно из-за того, что порог входа был низкий, а теперь надо сильно перестраиваться.
Скорее из-за банальной лени. Кто хочет идти вперед, тот не стоит на месте. Наблюдается та же самая песня в мире 1С при переходе от использования обычных к управляемым формам. Кому-то удобнее сидеть в теплом и обжитом болоте, а кто-то перестраивает себя и свое окружение.
Вы поддерживаете все написанные вами проекты? Если да — то ок. Если нет, то для "других" разработчиков "ваше" будет "чужим" и чем больше вы делаете "для себя" тем хуже вы делаете бизнесу, внося огромные риски при поддержке. Да, риски могут не оправдаться (вдруг "ваше" на самом деле неплохое), но всеже.
В 2015-м году было обсуждение в php internals. Длинное, тяжёлое.
https://www.mail-archive.com/internals@lists.php.net/msg80837.html
Следующим шагом должна стать нормальная, последовательная библиотека. С последовательным порядком аргументов. С последовательным наименованием, а не mysql_query и htmlspecialchars. Не быть тонкой обёрткой над C, и вообще с нормальными абстракциями, а не mysql_real_escape_string. С нормальными обобщениями, а не кучей функий sort/ksort/krsort/usort и так далее.
Пора чистить мусор и выкинуть вот это всё легаси. Тем более, раз уж всё равно порог входа вырос, как вы утверждаете.
А вот сортировка да, там всё хаотично
array array_filter ( array $input [, callable $callback = "" ] )
array array_map ( callable $callback, array $arr1 [, array $… ] )
Это нельзя понять. Это можно только запомнить
С другой стороны это будет уже не php. Сейчас ещё довольно многие скрипты, написанные под php4, можно запустить под php7.1. Да, скорей всего придётся поправить deprecated и т.д.., но переписывать КАЖДЫЙ вызов КАЖДОЙ функции не придётся. А в случае такой радикальной чистки авгиевых конюшен придётся править и все-все исходники, написанные даже под 7.1. На такой радикальный и резкий слом никто не пойдёт.
Это переход по смыслу эквивалентен переходу на Py3. Да, некоторое, довольно длительное время, будет два варианта, в старый не вносить новые фичи, чтобы разработчики потихоньку переходили на новый.
К примеру:
<?php
$var = array(5, 444, 121);
$var_obj = new SplArrayWrapper($var);
$var_obj->map('someFunction');
?>
То есть, создать специальные оболочки, построенные более грамотно и последовательно, но при этом не нарушающие совместимость?
Ну, как минимум в моем примере идет оверхед на создание нового объекта, но все же, что мешает применять похожий подход?
Я понимаю, подобную оболочку можно написать за пару часов на PHP, но намного большей производительности можно было бы достичь, если написать код на C.
Недостатки, которые я вижу — это еще большая фрагментированность, так как часть кода будет на новых функциях, часть — на старых, и при этом будут возникать кое-какие различия между ними в принципах работы…
Но все же, это лучше, чем рубить с плеча совместимость со старым кодом.
Ну или мириться с тем, что без подсветки параметров функций никогда не можешь быть уверенным, где haystack, а где — needle, что раздражает в современном PHP чуть ли не больше всего
подобное уже есть
функции аля mysql_query и mysql_real_escape_string были удалены из PHP еще в версии 7.0.
Не быть тонкой обёрткой над C
То есть предлагаете реализовать стандартную библиотеку на PHP? Не ну можно, но это тогда ждем JIT.
С нормальными обобщениями, а не кучей функий sort/ksort/krsort/usort и так далее.
А что именно вам тут не нравится? У каждой функции свое поведение. Нужно сортировать ключи — юзаем ksort. Реверсивная сортировка по ключам — rksort.
Если вам не нравится — вы всегда можете сделать так:
// std.php
namespace array {
function reverseKeySort(iterable $array): iterable { \rksort($array); return $array;}
function keySort(iterable $array): iterable { \ksort($array); return $array);
function split(iterable $arr, ?string $delimiter): iterable { /** ... */ }
function join(iterable $arr, ?string $glue): string { /** ... */ }
}
namespace str {
// по аналогии
}
Я часто вижу вот такое вот "надо переименовать" но никто не переименовывает почему-то.
Функция сортировки должна быть ОДНА и она должна быть универсальной, с сигнатурой вида:
sort(seq, compare_func)
Порядок сортировки, способ сравнения аргументов (что там, массив целых? Массив хешей и сортируем сначала по полю "size" а потом, если совпало, по полю "weight"? Что угодно) задаётся compare_func, которая принимает два объекта и для них выдаёт ответ: 1 если arg2 должен стоять после arg1, 0 если они равны и -1 если arg2 должен стоять до arg1 в отсортированном массиве.
Для PHP есть примечание — в нём массивы — не массивы, а смесь из массивов и словарей, поэтому в данном случае у коллбек-функции может быть не два, а четыре аргумента — k1 v1 k2 v2, где k — ключ аргумента, v — значение; остальное по-прежнему.
А уж если вспомнить, что есть лямбды, так этот подход вообще идеален. Они как раз и придуманы специально для таких случаев.
правда нет стандартных compare_func для неё
Функция сортировки должна быть ОДНА и она должна быть универсальной, с сигнатурой вида:
Ну так сделайте обертку на PHP и распространяйте как composer пакет. Вам же никто не мешает.
А уж если вспомнить, что есть лямбды, так этот подход вообще идеален.
Еще бы каррирование нормально можно было бы делать, вообще б зажили. А еще что бы лексические скоупы а не "один скоуп где все живет и локальный куда надо через use явно копировать".
В семёрке (только на ней проверял) можно осуществить такой вызов:
(func(...$args))(...$args);
То есть почти как в JavaScript, но с дополнительными скобочками.
А что именно вам тут не нравится? У каждой функции свое поведение. Нужно сортировать ключи — юзаем ksort. Реверсивная сортировка по ключам — rksort.
Есть массив клиентов, как их отсортировать так, чтобы вначале шли вип-клиенты, а потом обычные. Далее отсортировать по именам?
clients.OrderByDescending(c => c.IsVip).ThenBy(c => c.Name)
// Client.php
// ...
public static function byStatusAndNameComparator(Client $a, Client $b)
{
if ($a->isVip() === $b->isVip()) {
return $a->name <=> $b->name;
}
if ($a->isVip()) return -1;
if ($b->isVip()) return 1;
}
Ну и где надо отсортировать
usort($clients, [Client::class, 'byStatusAndNameComparator']);
что-то в этом духе.
Ну и да, всегда можно сделать что-то типа linq или вообще дикость, сортировать средствами sql.
Зато в UTF-16 всегда прилетает 2 байта, а в случае UTF-8 может прилететь как 2, так и 1 байт, как повезет.
Поэтому мне тоже кажется, что проще работать с UTF-16 чем с 8, и я тоже удивлен почему разрабы считают иначе.
Кто в теме, может объяснить?
Фиксированная ширина юникода — это только UTF32
В utf8 может существовать символ из 1, 2, 3 или 4 байт. Последний ли это байт в последовательности — определяется по крайнему биту (старшему или младшему — простите, я их вечно, откуда их надо считать)
Поэтому мне тоже кажется, что проще работать с UTF-16 чем с 8
Почитайте почему PHP6 не взлетел
До сих пор юзается куча легаси-кода, которая не знает про многобайтовые кодировки, но с этой магией нормально работает. Да что там легаси, тот же битрикс штатно работает на этой фигне.
Самое плохое, что нормальной замены до сих пор нет. Есть куча корявых функций из расширения mbstring, типа mb_substr вместо substr. Но оно не является нормальной заменой, так как а) для ряда функций типа регулярок (тот же preg_replace) замены 1-в-1 просто нет; б) часть вещей типа строка-как-массив ($str[2]) в принципе не заменяемая и в) заменить все строковые функции из всех используемых либ, шаблонов и т.д. — то ещё развлечение на тему рефакторинга.
То есть я бы понял, если бы они сначала запилили нормальные многобайтовые строки в ядро, а потом уже воевали с костылями. Но нет.
Поэтому, мне кажется, PHP надолго застынет в версии 7.0.
(дисклеймер: не пытайтесь это повторить в реальном проекте)
PHP сейчас пожинает плоды так сказать своей былой и бурной популярности.
Но эта гонка языка за Java ни к чему хорошему не приведет. Разработчики обучившись ООП, DDD, TDD итп в PHP потом начинают переходить на сам Java, потому что там возможностей на порядок больше. А те, которые хотят что попроще, смотрят в сторону Gо, Python, может JavaScript.
Поэтому с трудом верится в светлое будущее PHP. А вспомнить его исходники и муки написания расширений(по сравнению с ffi того же Python), так вообще перекреститься хочется.
Лично мне, когда нужно написать какой-то код на Java — жутко бесит. Как-то переносил кусок кода из Java в PHP — в итоге, задумавшись, строк 100 Java кода заменил одной строкой PHP.
Лично мне, когда нужно написать какой-то код на Java — жутко бесит. Как-то переносил кусок кода из Java в PHP — в итоге, задумавшись, строк 100 Java кода заменил одной строкой PHP.
Такое бывает только если плохо знать Java (и хорошо на PHP), на ней тоже можно писать быстро и коротко, другое дело что для этого нужно её довольно неплохо знать.
Разработчики обучившись ООП, DDD, TDD итп в PHP потом начинают переходить на сам Java, потому что там возможностей на порядок больше. А те, которые хотят что попроще, смотрят в сторону Gо, Python, может JavaScript.
Вы не поверите, но есть и те, кому множество возможностей Java (как вариант C#) кажутся излишними, но тянущими лишний оверхид (хотя бы в виде необходимости компиляции), но «попроще» тоже не устраивает, хочется многоуровневых абстракций, инкапсуляции, сокрытия и т. п… Из скриптовых языков PHP больше всех, субъективно, подходит для ентерпрайза и как язык, и как экосистема. Только одна Doctrine даёт огромную фору по сравнению с другими скриптовыми языками. В экосистемах Ruby и Javascript ничего подобного нет, в Python — похожа sqlalchemy, но по защите данных PHP уже как язык отрывается.
PHP имел понятную нишу в эпоху shared hosting, сейчас смысла в этом «языке» нет.
PHP шагнул далеко вперёд.
Нет, ну некоторые момент остаются актуальными: неконсистентная стандартная библиотека функций, неконсистентная последовательность аргументов (haystack-needle). Но вещи, которые там описаны постепенно становятся неактуальными. Посмотрите сколько было задепрекейчено к релизам 7.0, 7.1, 7.2
И это всё постепенно отпиливается.
Да, увы, тяжёлое наследие прошлого не даёт возможность сразу всё исправить и сделать красиво ибо тогда язык постигнет та же ситуация, которая сложилась вокруг раскола Python 2/3.
Но постепенно всё будет причёсано.
Зря вы так яростно апеллируете к этой уже очень старой статье.
З.Ы.
Очень надеюсь, что когда-нибудь этот RFC воплотят в жизнь (скорее всего, к версии 8.0): https://wiki.php.net/rfc/consistent_function_names
Зачем тратить время на изучение/применение кривой технологии, если можно взять что-то сразу нормально сделанное?
Да любая прямая технология начиналась с кривого глючного hello, world-а. Если PHP выпрямят, будет только лучше. А фанатизм вида "говно всегда останется говном" как раз наоборот, ни к чему хорошему не приводит.
И я видел какой код пишут php программисты, и как кривизна языка отражается на них.
В 2016 году есть альтернативы, поэтому начинать что-то делать на php довольно странно.
А ну-ка? Вот простой класс сообщений: https://gist.github.com/SerafimArts/798adfa04844bc3b311620a930c7727a чем этот код отличается от джавовского или шарпеца, например? Ну за исключением того, что он на порядок лаконичнее. Где эти хвалёные "костыли", которых я из-за "замыленного" глаза просто не замечаю?
P.S. Если не найдёте — это некоторый повод задуматься на тему: "Может вы видели код совсем даже не программистов, а любителей, которых в любом языке предостаточно?"
Ну за исключением того, что он на порядок лаконичнее. Где эти хвалёные «костыли», которых я из-за «замыленного» глаза просто не замечаю? Ну за исключением того, что он на порядок лаконичнее.
Банально:
if ($this->rendered === null) {
$this->rendered = $this->injectParameters($this->body->textContent, $this->parameters);
}
return $this->rendered;
На Java (которую ругают за многословность) записалось бы как:
if (rendered == null) {
rendered = injectParameters(body.textContent, parameters);
}
return rendered
Без всяких ужасных многократных $this и созданий лишних переменных. Так что
на порядок лаконичнее.
Крайне спорно.
удалено
В пыхе это тоже можно заменить, например на return static $rendered = $this->injectParameters(...);
, что будет ещё короче, но плохо с точки зрения качества кода.
Согласен на счёт возможности опускания this
, но это просто из-за того, что в джаве просто нет общего неймспейса, отсюда в пыхе требуется явное указание контекста, для исключения аффектов переопределения методов глобальным неймспейсом. Так что это, по-моему, не проблема языка, а способ реализовать те возможности, которые просто захардкожены в джаве (имеется ввиду автоимпорт java.lang.String и аналогичных).
Я, например, видел как люди писали в лог без таймстэмпа, то есть элементраные вещи делали криво.
Так эти люди и в django не встроенный механимз логирования (модуль python logging) будут использовать, а писать в текстовый файлик без таймстампа. Язык-то тут при чём?
Ну так я и показываю пример только того, что какие-то косяки языка — довольно стереотипны, при этом явно написал об этом, парируя утверждение про то "зачем M, если есть N". Так же явно упомянул, что если вы сталкивались с любителями — это не значит, что все такие.
А отвечая на ваш пример, могу даже сообщить, что в пыхе есть рекомендация (которую в 2016ом году можно считать стандартом) по реализации логгирования: http://www.php-fig.org/psr/psr-3/ И соответсвующая популярная либа, реализующая PSR-3: https://github.com/Seldaek/monolog/tree/master/src/Monolog/Handler То, что кто-то делал логи без даты как раз и говорит об уровне знаний ваших знакомых, а не о языке и его сообществе.
В каком ещё языке есть интерфейс логгирования на уровне почти что стандарта? Где написаны адаптеры под все возможные популярные APM и сервисы? И да, они с таймстампом.
В статье, и особенно в данной конкретной ветке идёт речь о том, что PHP изменился, стал лучше, но чтобы стать лучше вместе с ним, нужно капитально переучиваться.
Короче, считайте, что если вы хотите не наговнокодить по-быстрому, а реально делать проект по-человечески, у вас нет опыта нового PHP. И далее — см. рис. 1
В 2016 году есть альтернативы, поэтому начинать что-то делать на php довольно странно.
К чему Ваша писанина, я хз. :)
К вашему "имея опыт PHP" — я говорю, что ваш "опыт PHP" нерелевантен. Вам следовало сказать: "не имея опыта разработки сайтов ни на каком современном языке".
И тут сразу же становится вопрос, если честно выбирать: если никакого опыта нет, почему, собственно, PHP? Почему не PHP я запросто расскажу: в интернете гуглится такое количество вредных советов, некоторые из которых вообще не заработают на современной версии, что лучше начать с чего-то такого, что в прошлом не было столь популярно, но при этом так сильно отличалось от современной версии. Проще будет.
"Ложное знание хуже незнания", как тут в соседнем топике подмечают, а ваш "опыт PHP" — это как раз ложное знание, и лучше будет, если его будет некуда применить.
Прошу заметить, что процентов 80% этих вредных советов из прошлого PHP являются стандартной практикой, например на JS + Node в настоящем. Да, конечно, некоторые неактуальны в связи с наличием commonjs, манки-патчинга и прочих штук, но в целом ведь картина примерно такая же, нет?… Открываешь сырцы какого-нибудь JQuery (до компиляции т.е.) и вспоминаешь времена тысяч реквайров и чистой процедурщины на пыхе 4, ностальгия ;)
Я веду к тому, что языки, где все архитектурные тупики уже обкатаны и очевидны, а инструментарий на порядок превосходит более молодые альтернативы (и не обязательно JS, просто пример) — скорее наоборот является плюсом.
Сравнивать подходы в одном языке и в другом, а не сравнивать либу с языком. =)
Как давно вы в php видели код подобного вида? А в JS?
<?php
return (function() {
function a() {
// ...
}
})();
В исходниках JQuery — дерьмо (из-за ограничений языка)?
Сейчас или в году эдак 2008? :)
В JS тоже много нового с 2008 года.
Там ES6, какие ограничения языка при наличии бабела, вы что? =)
На современный пых больше всех похожи исходники Ангулара и Аурелии. Если бы только добавить правило "один файл — один модуль/класс" можно было бы ими даже восхищаться.
Для примера, JS: https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts PHP: https://github.com/illuminate/routing/blob/master/Router.php Подходы очень похожи, родственные я бы сказал.
Но если эти две штуки (Angular + Aurelia) скорее исключение из общего правила node-сообщества и скорее специфика TS (исключение, учитывая наборы решений в npm), то в случае пыха процентов 90% пакагиста содержит код подобного уровня.
P.S. Хотя, начиная с 579ой строки в ангуларе начинается просто неперевариваемая дичь без единого комментария "зачем и почему", достигающая апогея к 1000ой. Макконнелл переворачивается в кровати, бедняга.
Там ES6, какие ограничения языка при наличии бабела, вы что? =)
Так к чему было это? :)
Открываешь сырцы какого-нибудь JQuery (до компиляции т.е.) и вспоминаешь времена тысяч реквайров и чистой процедурщины на пыхе 4, ностальгия ;)
Что не так с исходниками JQuery?
JQuery использует бабель?
Значит Ангуляр и Аурелию писали php-программисты :)
Ну и то не JS, а TS. :)
Тогда ни у кого нету якобы релевантного опыта на php7.
Всем бросать из-за этого php и писать на чем-то другом?
В своем же рассуждении Вы отконились от первоначального вопроса.
По другим языкам тоже куча мусора гуглится.
А в том же питоне и вовсе 2 актуальные НЕСОВМЕСТИМЫЕ ветки, старая никак не умрет.
Возможно и в других языках такое.
Ну и мусор гуглился в 2000-ых.
Тогда параллельно существовали PHP 4 и 5.
Ну и не ответили на каком же языке стартовать проект.
Но Ваш дерьмоответ заплюсовали, а мой уточняющий вопрос, на который так и не был дан ответ, заминусовали.
Что характеризует преобладающее стадо на ресурсе.
Чтобы капитально не переучиваться
Неправильная постановка вопроса.
А зачем вообще переучиваться? Почему это стало догмой?
Старый код продолжит работать, нужно поправить чуток deprecated, но это было и между минорными релизами.
Кому нужны новые фичи, пускай учат.
Какие это фичи? Строгая типизация? Чего там ее учить? :)
Сложно не учить, сложно программировать в строгой типизиции.
Именно из-за нестрогой типизации PHP и выстрелил.
А сейчас в язык пришла куча академиков, которые пытаются сделать из него Java.
Большинству это просто не нужно.
PHP3
Как всегда пример слабо связанный с реальностью. :)
Та боже мой.
deprecated они и так выучили, раз их проект на 5.6.
Будут переходить на 7 — выучат и 7.
Обратная совместимость PHP — еще один его плюс. А не как в уже упоминаемом питоне, фактически имеем 2 разных языка. :)
ООП?
Так в последнее время уже тренд говорить, что ООП — говно.
То наследование не стоит использовать. А без наследования и другие киты, на которых стоит ООП, имеют мало смысла.
Очень маловероятно, что легко найдешь работу на современном рынке
Да, вероятность найти работу падает. Сейчас ищут программиста не по умению думать, а по внешним признакам, вроде знания «чем отличается абстрактный класс от интерфейса», которые:
а) можно натаскать перед собеседованиями.
б) это вряд ли существенные детали. Это реализация. А реализация может быть любой, желательно самой простой.
в) это все равно не используется в проекте. :)
Если человек писал качественный код в процедурном стиле, то он будет его писать и в другом стиле. :)
Ну вот что дает Вам использование ООП? :)
Можно перед собеседованием прочитать? :)
Вторая: накидать описания классов для моделирования процесса кормления человеком собаки.
Бумажка, ручка, любой псевдокод, любые вопросы.
В новом есть нормальное ООП и какие-то зачатки ФП (лямбды и т.д)
Так что выбора особого не вижу тут.
Ну просто чтобы не тащить целый twig в домашнюю страничку.
https://facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919/
https://github.com/facebookarchive/xhp-php5-extension/blob/master/README.textile
Даже расширение для PHP есть, осталось его только включить в дефолтный список.
Вообще, это придумала Мозилла первая, кажется (они заметили, что синтаксис XML не противоречит синтаксису языка, поэтому XML-конструкции пожно вставлять в код не как сторки, а как first-coass citizen). Он позволили встраивать XML в JS при написани движка браузера/расширений. Идея, совершенно лежащая на поверхности, но почему-то потребовалось почти 20 лет, прежде чем она стала использоваться (так бывает; иногда мы совершенно не видим то, что прямо перед нами — другие примеры: async-await, а также банкльное колесо).
Вообщем-то если подумать, например, когда мы генерим json,
то написание что-то вроде
echo('{var:"'.$var.'"}')
или
{var:"<?=$var?>"}
выглядит довольно странно и обычно так все-таки не делают.
Опять же при генерации XML, обычно стараются делать это на основе каких-то структур.
Однако в Html для браузера мы привыкли делать как-то так:
<input type="text" value="<?=$var?>">
Собственно все проблемы типа безопасности, необходимости экранирования и тд, как мне кажется, они именно из-за этого подхода. Т.е., по-моему, суть в том, что такой подход не органичен.
Знак доллара у переменных это не проблема, это способ избавиться от явного объявления новых переменных. Вот лексические скоупы — другой разговор. Или дженерики для пыха.
Для тех кто не хочет вникать в Си, есть другой вариант помочь продвигать фичи — yay. Берем RFC и реализуем как пакет для composer. Тем самым давая возможность народу "покрутить повертеть" фичу на этапе обсуждения. Мало кто не ленится собрать себе пых при наличии MR с новой фичей и покрутить. А так хоть народ вместо "непонятно" будет давать фидбэк внятный.
Доллар играет очень важную роль в языке:
1) Позволяет визуально отличать декларации переменных от структур, например:
$a; // переменная
a; // константа
2) Добавляет грандиозные и консистентные возможности метапрограммирования, например:
$obj->field; // Получение ссылки на задекларированное поле
$obj->$field; // Получение ссылки на поле, имя которого содержится в строковой переменной $field
echo $some; // Вывод значения переменной some
echo $$some; // Вывод значения переменной, имя которой содержится внутри переменной some
3) Позволяет делать интерполяцию без спец.символов (сомнительно очень), например:
$world = 'Вася';
echo "Привет $world";
Да пошутил же я ))
Просто одно время был холивар, ну типа лишний шифт нажимать))
А некоторые не шутят и действительно считают, что без "долларов" лучше, а конкатенировать стоит символом "+"...
Ну если быть совсем честным, то их мнение имеет право на жизнь, вот на ваши примеры можно вот так посмотреть:
>1) Позволяет визуально отличать декларации переменных от структур, например:
>$a; // переменная
>a; // константа
Обычно константы все-таки заглавными выделяют, типа define («CONST1», "")
>2) Добавляет грандиозные и консистентные возможности метапрограммирования, >например:
А часто ли в реальном коде такое оправдано используется? Почти все случаи, которые я встречал были либо с проблемами в безопасности, либо слабо читаемыми, либо бажными. При этом ктож мешает бакс оставить именно для этого. т.е.
someVar // Вывод значения переменной some
$someVar // Вывод значения переменной, имя которой содержится внутри переменной some
>3) Позволяет делать интерполяцию без спец.символов (сомнительно очень), например:
Опять же как раз в этом случае бакс можно и оставить, так например сделано в Scala:
println(s"${msg}\n\n")
Согласен. Я преувеличил. Но, с другой стороны довольно тривиальный пример:
public function __get(string $field)
{
$getter = 'get' . ucfirst($field);
return method_exists($this, $getter)
? $this->{$getter}();
: null;
}
Нужны гетеры — средства современных IDE позволяют их сгенерить нажатием пары кнопок. Ваш же пример, как и многие другие с ипользованием $$ открывает простор для багов. Ошиблись где-то: либо в названии переменной или названии метода и сходу баг уже не обнаружить, а при другом подходе сама IDE нам бы об этом сказала.
вот бы как в python
13 + "42"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
в целом же всегда есть typescript/flow что бы сделать свою работу чуть более типобезопаснее.
человек, который пишет на современном php, должен как минимум знать кучу ООП best practices, использовать фреймворки и composer, знать кучу фич языка и его расширений
Ничего никто не должен :)
Такое норм? =)
register_shutdown_function(function() {
// Send email
});
P.S. Ну понятно, что эта штука не асинхронная, но вполне решает подобную проблему без внешних зависимостей. Хотя по-хорошему, конечно, лучше очереди.
в Symfony и swiftmailer для этого есть spool. причем в двух реализациях, через файлы и cli команду или in-memory очередь и fastcgi-finish-request (то есть отправка идет после завершения обработки запроса). Для большинства этого хватает. Если нет — всегда есть очереди, нечего загружать процесс обрабатывающий запросы чушью вроде отправки email-ов.
Имею многолетний опыт с PHP и с Yii в частности, последние 2 года полностью переехал на JS и не жалею.
Очень хотелось бы чтобы улучшилась асинхронность, многопоточность, появился loop, библиотеки стали неблокирующими, но глядя на костыли с какими добавляются новые фичи, думаю продолжу при надобности подтыкать проект на других языках nodejs, go. Может и не надо делать универсальный инструмент.
Но когда я сделал
$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
$array = array_values($array);
echo $array[12];
и php с радостью исполнил мою просьбу и даже продолжил работать дальше — я понял, что это уж совсем перебор. Продолжил после этого выполнение — к сожалению да. Будет пытаться выполнить любой бред максимально долго. Но нехитрый фокус с set_error_handler, который делают наверное все фреймворки — и можно попросить останавливаться и кидать нормальное исключение.
К сожалению, огромное количество php-шников до сих пор используют php как php4, и не хотят учиться.
Люто плюсую.
Так что кода в php добавят виртуальную машину, аннотации, многопоточность php станет джавой.
А ничего, что до php5 там и так были функции? Да что там, до php4 у вас были только функции для организации кода (подпрограммы тип), как в Си. Так что факт наличия анонимных функций в языке где функции были с самого начала — это просто факт. А вот в java функций как самодостаточных единиц небыло отродясь, теперь есть и это прогресс.
Доктриновские аннотации уже стали почти что дефолтом. Многопоточность тоже есть (pthread экстеншн), виртуальная машина 100 лет как, не классическая, но наличие опкодов и их кешеров (opcache, apc, etc) намекает ;)
Поэтому, например, в Python все — объекты первого класса (модуль можно передать в функцию форматирования строки, как вариант), что дает гибкость и заменяет некоторые паттерны из GoF простой передачей объектов.
В PHP же совсем недавно появились лямбды (и то весьма странные, с костылем-use вместо нормального скоупинга), первый класс только у скаляров, да объектов, кажется. Отсюда монстроузные решения типа Симфони и Доктрины, которые в динамическом языке выглядят странной пародией на Java-экосистему.
Вопрос: какие преимущества дает PHP, чтобы предпочесть его для нового проекта с одной стороны динамике Python/Ruby, с другой стороны — статике и энтерпрайзу Java?
https://w3techs.com/technologies/details/pl-php/7/all
Книга «чистый код» Роберта Мартина.
Концепция «Domain Driven Design» — подчеркивает важность того, что код и термины в нем должны отражать суть бизнес-задач
У Фаулера есть различные книги, которые стоит почитать.
улучшать репутацию PHP
Улучшайте свою репутацию… :)
Книжки?
Я хз, есть ли что-то особенного под PHP.
Но одними книжками сыт не будешь.
Ресурсы?
гугл, стековерфлоу (английский), хабр. Слышали эти ресурсы? :) Ах да, официальная документация и комментарии к ней (тоже на английском).
Нужна прежде всего практика и общее правильное представление о программировании.
Если Вы собрались вообще без английского языка писать на PHP — ну это близко к тупиковому пути. :)
П.С.
Книги, указанные предыдущим оратором поддерживаю (это как раз общие книги).
Подкиньте кто нибудь хороших ресурсов/книжек на русском, которые лично вам помогли лучше в этом разбираться.
Всё что я могу найти самостоятельно в гугле — пока я это не прочту и не изучу, заранее не скажет мне, кому, как, и в чём оно помогло. И помогло ли вообще. Я могу найти абсолютный шизофреничный бред, или категорию литературы, которая не подходит мне по уровню, и не даст никаких адекватных результатов. Я не плохо знаю битрикс, и с этим знанием, я порой нахожу такие неудачные примеры и статьи от левых людей в их говноблогах, от которых хочется повеситься. По битриксу в непрофильных блогах уйма идиотских и вредных советов. Где гарантия что я не наткнусь на такие же, при поиске информации о PHP и ООП? Даже та же «чистый код», которую мне посоветовали выше, была немного раскритикована на этом же хабре
Если тебе нечего сказать конкретно по вопросу — уж лучше бы молчал, чем писать очевидные вещи.
Книжек тебе уже подкинули. Читай. Это общие книги. Я поддержал эти книги, если ты не увидел…
Если умения думать у тебя нету, вряд ли они тебе помогут.
Я могу найти абсолютный шизофреничный бред, или категорию литературы, которая не подходит мне по уровню, и не даст никаких адекватных результатов.
А откуда уверенность, что тут Вы получите то, что хотите? :)
была немного раскритикована на этом же хабре
А Вы читали эту книгу? :)
Мало ли что какой-то дурак написал. (Да, последнее время концентрация некомпетентности на хабре зашкаливает, возможно хабр и с натяжкой в списке предложенных мною ресурсов).
уж лучше бы молчал, чем писать очевидные вещи.
Ну почему же. Вот вам:
Но одними книжками сыт не будешь.
Но если Вы, как упертый баран, хотите только книжек без практики, то это тоже путь, близок к тупиковому. :)
Поменяй работу, походи на собеседования.
А чем Вас не устраивает Битрикс? Он же ООП. Там тоже непаханное поле.
Новое ядро — еще ближе к новомодным фреймворкам.
А она мало где в действительности нужна. :)
А то на собеседованиях спрашивают ООП и прочую ерунду, а в проекте это и близко не используется. :)
Если Вы будете писать на готовом фреймворке / CMS, то многое будет сделано за Вас, скорее всего Вам не нужно будет городить иерархии наследований и т.п. :)
Вам нужно только их документацию прочитать. Многие разработчики этим и злоупотребляют. Они знают только свой фреймворк, а в незнакомом месте и шагу самостоятельно ступить не могут. :) Самого языка и программирования вообще они, можно сказать, и не знают. :)
Начните свой проект на самописи. :)
Ах да, читайте исходники. :)
Что-то непонятно — в гугл. (что-то по предыдущему предложению, а то еще опять неправильно поймете) :)
Кодил на php еще с 4х, молча кодил, рос php, что и как не задумывался, просто обновлялся и использовал новые фичи.
Ниша конечно есть! Уверен она никуда не денется. Куча php фреймворков, так и останутся php фреймворками. Когда выбирал фреймворк, увидел, что между ними неплохая конкуренция. Конечно, с повышением уровня входа в php, будет расти вход и на то, что на нем пишется. Очень вдохновляет к личному росту и рад, что успел запрыгнуть в этот поезд. Благодаря php, сейчас углубляюсь и другие языки программирования. Спасибо Расмусу за это!
Кто вперед на PHP 7.1?
Он остался простым языком. :)
Это фреймворки просто переусложнены. :)
Человек не совсем корректно выразился, подозреваю.
Упрощены за счёт того, что часть задач архитектурирования бизнес-логики уже реализована самым эффективным образом (эффективность этого "образа" выбирает уже сообщество) в рамках общих идей конкретного фрейма. При ручной реализации подобных штук, получится либо архитектурный оверхед, либо одноразовая шляпа.
С выходом PHP7? :)
А ниче, что все они работают и на PHP5? :)
часть задач архитектурирования бизнес-логики уже реализована в рамках общих идей конкретного фрейма
То есть программисту не нужно писать кусок бизнес-логики ибо за него это сделано на фреймворке? :)
Что же такого за него реализовали, что ему не нужно писать? :)
Но все равно разработка на фреймворке какая-то оверхедная. Куча ненужных дырявых абстракций, которые нужно постоянно переступать. :)
Кстати, использование фреймворка стимулирует разработчика и дальше все усложнять. :)
либо одноразовая шляпа
Почему же одноразовая? :)
Можно использовать в других своих проектах.
А если проект один и большой, то можно иметь нужную шляпу, а не брать в аренду не совсем нужную. :)
Одно введение в язык позднего связывания значительно упростило фреймворки. Интерфейсы и абстрактные классы. Сокрытие членов классов. Callable, включая анонимные функции с замыканиями. Итераторы. Всего и не упомнить.
Если вы разработку на PHP4 не застали, то поверьте на слово, что фреймворк аналогичный по функциональности Symfony или Yii был бы гораздо сложнее и внутренне, и в использовании.
Чет мне показалось, что это как всегда приукрашенное мнение, которое навязывают сектанты фреймворков.
Ну или Вы сами купились на их пропаганду. :)
Одно введение в язык позднего связывания значительно упростило фреймворки.
Это когда было сделано?
С выходом 7? :)
Об остальном и говорить не хочу. Ощущение, будто Вы пытаетесь втянуть меня в какое-то болото. :)
Если вы разработку на PHP4 не застали, то поверьте на слово, что фреймворк аналогичный по функциональности Symfony или Yii был бы гораздо сложнее и внутренне, и в использовании.
Только фреймворк был бы сложнее?
Мой код тоже был бы не таким без упомянутого Вами без причины позднего статического связывания.
Более странно, что его не было изначально. :)
Ах да.
Я человек простой. Вижу тупость или ложь, выражения не особо подбираю. :)
Тред о прогрессе с 4 до 7.
Больше похоже, что вы видите свои фантазии.
Я отвечал прежде всего на это.
Конечно, с повышением уровня входа в php, будет расти вход и на то, что на нем пишется.
Перехода 4-5 — можно сказать, не застал. Но не заметил там повышения уровня входа.
Ну и не заметил повышения уровня входа при текущем переходе 5-7.
Где же идет повышение уровня входа — так это на фреймворках.
Были ли фреймворки при переходе 4-5 — хрен его знает. :)
Но при переходе 5-7 во фреймворках ничего не упрощено, так как они хотя бы все совместимы с 5.
Есть вопросы? :)
Давайте разберемся что такое значит "проще".
Для меня "проще" выражается в возможности вносить изменения не внося изменений в то, что уже было написано ранее. Такие штуки проще поддерживать, проще развивать (потому что риск регрессий меньше). Что для вас проще?
Были ли фреймворки при переходе 4-5 — хрен его знает. :)
Они были
Блеск и нищета php. Эволюция языка от 4.x к 7.1