Блеск и нищета php. Эволюция языка от 4.x к 7.1

    image


    По слухам, сегодня должен состояться релиз 7.1. Поэтому хотелось бы немного оглянуться назад и посмотреть, а как же php вырос из набора костылей и подпорок в полноценный язык для веба. Прямо по шагам, т.е. по версиям. А в конце хотелось бы немного поразжигать поразмыслить о роли php в современной экосистеме.


    Давайте мысленно вернемся во времена php4, когда получили своё развитие wordpress, bitrix и миллионы других CMS и домашних страничек.


    Php до пятой версии можно было называть языком с натяжкой. Скорее это был хаотический набор функций, которые можно было быстро вызывать, чтобы выплюнуть данные из mysql в браузер. Там были зачатки ООП, но такие, что наверно лучше бы их не было.


    Каждый второй сайт работал с включенными галочками magic quotes. Т.е. все переменные, которые прилетали от браузера магически экранировались. Что якобы позволяло их безопасно вставлять в базу данных. На деле же универсальным CMS приходилось это дело чистить (или оставлять как есть, в зависимости от настроек в php.ini). В общем мрак. Но для новичка якобы было “удобно”: вставлять всё, что прилетело в базу и не париться.


    Соответственно, порог входа был крайне низким, достаточно было выучить функцию mysql_query и htmlspecialchars. Это привело к тому, что сайты на php стали делать абсолютно все: чуть ли не каждый второй студент был членом “веб-студии”.


    Порог был низким, качество кода соотвествовало. Возьмите любой крупный проект, который начался в те времена, и посмотрите на его код. Страх, ненависть, боль.


    Но потом появился php5


    php 5.0 ( 2004 год)


    Эта версия языка сделала огромный рывок в ООП. Появились модификаторы доступа (public, protected, private). Выделились статические методы (static). Появились интерфейсы. Деструкторы. Reflection API. Работа с исключениями. Магические методы __get и __set. Итераторы. ArrayAccess (чтобы можно было сделать объект, имитирующий массив). И многое-многое другое. По большому счету парни взяли, и многое скопировали из java, включая даже названия ключевых слов (extends, implements, try, catch и т.д.). Т.е. получилась динамически типизированная джава. Правда без неймспейсов.
    Насчет типизации тоже был сделан шаг вперед, а именно type hinting. Т.е. в аргументах методов стало можно указать имя класса (или интерфейса), таким образом стал проверяться тип (хоть где-то!).
    Появилось расширение SPL (набор интерфейсов и классов для решения стандартных задач).


    После релиза у многих разработчиков случился форменный разрыв шаблонов, так как люди внезапно стали резко разделяться на два лагеря: те, кто умеют ООП и те, кто не умеют ООП и костылируют старые вордпрессы. Понятно, что многие и раньше (еще на php4) пытались работать с тем ООП что было, но тот велосипед с квадратными колесами не позволял по-настоящему развернуться.


    Также в php5 раза в два выросла скорость. Короче, php5 — это был тупо отдельный новый язык.


    php 5.1 и 5.2 (2006-2009 годы)


    5.1 и 5.2 не принесли много изменений в сам язык, их было всего парочка: магические методы __isset и __unset (в дополнение к __get и __set).
    К type hinting добавился еще и array. Т.е. еще один шаг к чуть более статической типизации. Хочу заметить, что с каждым релизом, похоже, идет попытка избавиться от магии.
    Добавился встроенный интерфейс Serializable.
    Некоторые улучшения в SPL и Reflection


    В основном это перепахивание различных функций и багфиксы. Например, появилась функция json_encode


    Очень важной фичей было включение PDO по умолчанию. Всё меньше и меньше людей используют mysql_query и SQL-инъекции в них.


    php 5.3 (2009 год)


    А вот версия 5.3 стала очередным прорывом в языке.
    Самое главное — появились неймспейсы (аналог package в java). Это дало большой толчок к развитию различных библиотек и фреймворков. Через пару лет после релиза начал зарождаться менеджер зависимостей composer.


    Появились лямбды и замыкания. К примеру, в java лямбды появились на 5 лет позже.
    (а в c# они к тому времени уже 5 лет как были)


    Появился оператор goto


    Сокращенный тернарный оператор ?:


    Появился оператор static для позднего статического связывания и магический метод __callStatic


    php-fpm включен в ядро


    php 5.4 (2012 год)


    Здесь наконец-то полностью выпилены магические кавычки и register_globals. Т.е. с какой-то версии они были deprecated, а начиная с 5.4 их наконец-то грохнули. Кстати, интересный факт: на одной конференции Расмус Лердорф (создатель php) сказал, что голосовал против выпиливания magic_quotes, что на мой взгляд очень странно. Мне казалось, что все уже давно наелись этой магией по горло.


    Также в этой версии было еще очень важное изменение: появились примеси (traits).


    Добавлена короткая запись массивов, т.е. вместо Array(1,2,3) стало можно писать [1,2,3]


    Также можно отметить появление разыменования массивов


    foo()[0]

    и возможность сделать так:


    (new foo)->bar()

    В type hint стало возможно исползьовать callable


    php 5.5 (2013 год)


    В 5.5 появились генераторы и ключевое слово "finally".


    А также рызыменование литералов массива и строки:


    echo [1, 2, 3][0];
    echo 'PHP'[0];

    Оператор ::class для получения имени класса вместе с неймспейсом.


    php 5.6 (2014 год)


    Стало можно использовать выражения в константах.
    Добавилась возможность делать функции с переменным количеством аргументов (...$params) и развертывание аргументов c помощью оператора ...


    php 6 (никогда)


    php 6 так и не вышел. Главный challenge этой версии был в поддержке UTF на уровне ядра (был выбран UTF-16). Но там оказалось столько работы, что после длительной разработки в итоге от идеи отказались. Как утверждают разработчики, если бы выбрали UTF-8, все было бы гораздо легче и был бы какой-то результат. Уж не знаю почему.


    php 7 (2015 год)


    Седьмая версия стала очередным прорывом в языке, сопоставимая с 5.0 и 5.3. Во первых, всё стало быстрее работать раза в два-три.
    Во-вторых, в тайпхинтинг стало возможным использовать скалярные типы: int, string и т.д. А также задавать тип возвращаенмого значения метода. Причем, если в начале файла указать


    declare(strict_types=1)

    то на попытку передачи float в аргумент, требующий int, будет выдан Fatal Error.


    По сути это дает возможность писать на php почти что как на строго типизированном языке.


    Добавлены операторы ?? и <=>


    Появились анонимные классы, групповые декларации use, улучшены генераторы, убрана некоторая магия из преобразования строк в числа и прочее.


    php 7.1 (сегодня)


    Типы аргументов и возвращаемых значений можно пометить как nullable с помощью оператора?
    например ?string


    тип возвращаемого значения void. Т.е. если в таком методе будет return, то это вызовет fatal error


    Замена list на []
    т.е. будет возможна запись


    [$a, $b] = [$b, $a];

    У констант класса появилась видимость (public, protected, private)


    Обработка нескольких исключений сразу (как в java)


    catch (FirstException | SecondException $e)  

    Отрицательные смещения для строк "abcdef"[-2]


    Асинхронная обработка сигналов pcntl_async_signals()


    Полный список php7.1 уже доступен в мануале: https://secure.php.net/manual/ru/migration71.php


    Что мы имеем в итоге?


    В итоге мы имеем хороший язык для веба, у которого есть всё: фреймворки (Symfony, Yii и т.д), менеджер зависимостей и т.д. Но порог входа теперь совсем другой. Т.е. человек, который пишет на современном php, должен как минимум знать кучу ООП best practices, использовать фреймворки и composer, знать кучу фич языка и его расширений.


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


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


    Вообще, хотелось бы обсудить перспективы php на будущее. Какие у языка есть киллер-фичи?


    Т.е. после внедрения в язык кучи языковых конструкций, он стал не очень привлекательным для новичков (мне кажется, новичок скорее выберет go из-за простоты). Но при всём своём развитии (которое я очень сильно приветствую), php не дотягивает до языков кровавого энтерпрайза, таких как C# или та же java. Потому что типизация все же не совсем строгая, нормальной многопоточности считай нет, и всё еще есть костыли разных видов. Также нет дженериков, человеческой поддержки utf. Массив в php — это странная смесь массива и HashMap и т.д. Т.е. если в энтерпрайзной нише уже есть java/c#, то зачем там нужен php, который слегка не дотягивает?


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

    Поделиться публикацией

    Похожие публикации

    Комментарии 286
      –1
      Как вы думаете, есть ли своя ниша у php, и в чем она заключается?

      На мой взгляд везде, где не требуется GUI без браузера, и не слишком критична скорость выполнения.
        +2
        господа минусующие, а не проясните ли мне, в чем же это я не прав? И собственно за что минуса? за мое личное мнение?
          +3
          Не минусил и PHP люблю, но думаю за слово «везде».
            +4

            Я думаю, все дело в аргументации. Когда речь идет о нише языка программирования, я полагаю, нужно учитывать его особенности. Я бы выделил следующие особенности PHP:


            • Изначальная ориентация Расмусом на web-разработку, что во многом определило курс развития языка.
            • В экосистеме PHP доминируют библиотеки нацеленные именно на веб-разработку
            • Низкий порог вхождения в язык (легко найти разработчиков, много уже написанных продуктов, библиотек)
            • 99% внедрений используют PHP для выполнения кода без сохранения состояния внутри интерпретатора (параллельно исполняемые экземпляры почти не влияют друг на друга кроме как через кеш или персистентное хранилище данных)
            • Большое количество услуг PHP-хостинга, высокая ценовая конкуренция в этом сегменте

            Все это вместе (и некоторые другие факторы тоже, конечно) и определяют нишу этого языка сегодня.


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


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

              0
              но никаких других ограничений, кроме как отсутствие некоторых узконаправленных библиотек нет. Вот к чему я клонил.
                +1

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

                  0
                  ниша != можно если зачем-то хочется.
            +1
            Я хочу чтобы в мейнстриме появился нормальный компилируемый язык со статической типизацией для веб-разработки. Да, конечно что-то есть, можно хоть на си писать сайты… но это не распространено. А распространены именно динамически типизированные языки php, python, ruby и js. Интересно почему?

            Об уровне — это чистая правда. Я не веб-разработчик, но когда в старые времена для каких-то целей нужно было создать сайтик (по сути простой веб-интерфейс для доступа к БД в локалке), я это сделал на «php4» вообще не задумываясь — настолько все было просто.
            Что там творится теперь — мне непонятно. Уровень абстракции очень сильно вырос, количество абстрактных прослоек выросло, и это привело к тому что я «не чувствую» ни сложности алгоритмов, ни низкоуровневой структуры программы. То есть современные фреймворки работают, но их работа превратилась в некую магию, для полного понимания которой нужно, вероятно, глубоко изучить внутреннюю структуру фреймворков на самом низком уровне. Все ли к этому готовы?
            Все руководства по фреймвокам сводятся к написанию «hello-world» сайтов практически без объяснения внутренней работы самого фреймворка. Я после безуспешных поисков такого глубокого руководства пытаюсь сам разобраться понемногу в свободное время, может статью напишу:)
              +8
              Посмотрите на .Net Core
                +3
                Все руководства по фреймвокам сводятся к написанию «hello-world» сайтов практически без объяснения внутренней работы самого фреймворка.

                Не скажу за все, скажу за django — туториал на офсайте неплохой, показывается и MVC и работа с данными, с шеллом, с админкой, после него можно курить сами доки, они очень даже классные.
                Что там творится теперь — мне непонятно. Уровень абстракции очень сильно вырос

                Ну естественно вырос, сейчас требуется не просто отображение каких-то статичных данных, и чтобы нормально въехать во все возможности фреймворка, нужно потратить такое же количество времени, как на изучение какого-то десктоп фреймворка.
                  +5
                  Я хочу чтобы в мейнстриме появился нормальный компилируемый язык со статической типизацией для веб-разработки.

                  Java, C#, PHP (PHP не компилируемый, но тайпхинтинг — тоже вариант статической типизации).
                  Эти три языка чаще всего и используют на длительных веб-проектах.

                  Все ли к этому готовы?

                  Кто не готов, может клепать в старом стиле и получать зарплату немногим выше, чем настройщики вордпрессов.
                  На таких новичков спрос всегда будет.
                  Просто язык повзрослел, и стали популярны технологии, требующие навыков профессионального программиста.
                    0
                    Go посмотрите. Уже 13 позиция в TIOBE индексе (по сравнению с 48 в прошлом году). Вполне себе «мейнстрим».
                    Нормальный, компилируемый, со статической типизацией, лишенных кучи ненужного синтаксического сахара.
                    –1
                    Я хочу чтобы в мейнстриме появился нормальный компилируемый язык со статической типизацией для веб-разработки


                    Существует.
                    И уже как несколько лет в мейнстриме у серьезных разработчиков.
                    В т.ч. в production очень серьезных контор (как Dropbox, к примеру).

                    Называется Go, golang.

                    Да, конечно что-то есть, можно хоть на си писать сайты… но это не распространено. А распространены именно динамически типизированные языки php, python, ruby и js. Интересно почему?


                    Потому что вы просто не знаете об использовании в крупных веб-проектах Go, Java, Scala, C#.
                    Почему не знаете — потому что не сталкивались.
                    Почему не сталкивались тоже понятно — ведь хоумпейджи на них крайне редко пишут.
                      +1
                      Я не веб-разработчик, но когда в старые времена для каких-то целей нужно было создать сайтик (по сути простой веб-интерфейс для доступа к БД в локалке), я это сделал на «php4» вообще не задумываясь — настолько все было просто.
                      Что там творится теперь — мне непонятно.

                      Ничто не мешает и теперь на php7 накидать. Более того, и ваш старый код скорее всего будет работать.
                        +1
                        Вроде как часть расширений убрали, в частности mysql ( и это не большая проблема, там где это вынесено в отдельный класс, а если это бесконечные mysql_query, написанные неким индусом?) А такого кода на РНР просто море, в виду того, что «работает не трогай», и «Вась, там кнопочку выведи еще одну, что бы отчеты в эксель строило». Хотя, признаюсь, сидим на работе глубоко на 5.х, и пробовал на 7.0 проект перевести только на одной шабашке, именно с подключением к БД и были проблемы.

                        Конечно, накидать нечто подобное по новой не составляет проблемы, но лично мне подобные изменения (углубление в ООП) в РНР нравятся.
                          +1
                          Ну за mysql (при наличии pdo, mysqli и mysqlnd я уж не знаю, десяток лет точно) надо карать. Я думаю, через пару лет к этому и придёт, когда php5 хостинг будет в 2 раза дороже php7.
                            +1
                            А какая разница, что человек использует mysql, кроме mysqli?
                            Ну кроме того, что он не поддался хайпу?
                            Запросы выполняются? Все, отлично.

                            https://habrahabr.ru/post/316506/
                              0
                              А какая разница, что человек использует mysql, кроме mysqli?

                              mysql_* функции удалены из php7+. А так ничего.


                              Запросы выполняются? Все, отлично.

                              все завязано на устаревший функционал? Все отлично.

                                0
                                Так карать-то зачем? :)
                                Я написал обертку для вызовов mysqli_ ф-й из mysql_ функций для php7 и продолжаю писать в привычном стиле :)
                                  +1
                                  продолжаю писать в привычном стиле :)

                                  Если всю работу с данными вы изолировали, и SQL не размазан по всему проекту, то "карать" действительно незачем. Особенно если в "привычный стиль" не входят штуки вроде "интерполирую ка я айдишку в строку с SQL". Ну мол prepared statements, параметры и все такое...

                                    +1
                                    Я бы сказал, что если SQL размазан, то карать нужно независимо от того, mysql_*, mysqli_* или PDO. :)
                        +3
                        А распространены именно динамически типизированные языки php, python, ruby и js. Интересно почему?
                        Потому что скорость разработки на них выше. Достаточно исправить исходный код и тут же получить результат, в отличии от компилируемых языков, где много времени тратится на саму компиляцию.
                          –1
                          Вы случайно не под vax пишите ?)
                          Я понимаю что ядро linux будет не 15 минут компилироватся(хотя возможно я ошибаюсь и это происходит быстрее), но давно уже прошло время когда те же самые java/C#/C/C++ компилировались.
                            +1
                            Теперь они интерпретируются? :)
                              0
                              ошибочка вышла, «долго компилировались»
                                0
                                да, .net core при разработке можно юзать именно что в режиме интерпретатора
                                –1
                                Я вот слышал, что браузеры собираются сутки. Но это к слову.
                                Для примера, если вы почитаете интервью с разработчиками Facebook, то они как раз и упоминали большую скорость разработки, когда мотивировали отказ от других языков.

                                P.S. даже если проект будет собираться 1-2 минуты, это уже долго, потому что таких минут для всей команды будет набираться на полчаса-час в день на разработчика, а в переводе на суммарные затраты времени будет очень большим.

                                P.P.S. Да и зачем компилирование? Скорость скриптовых языков достаточно велика. Качество кода? С новыми версиями PHP можно писать надёжнее. А если будут весомые аргументы, то и сейчас есть компилируемые языки, которые можно использовать. Тот же Nginx не на PHP написан.
                                  0
                                  Есть ли ЯП которые имеют статическую типизацию и не компилируются? Я о таких не слышал.
                                  С компилируемыми языками тут вопрос стоит не о скорости(о ней меньше всего парятся), а о качестве кода, т.к. в динамических языках или позволяющих использовать динамику очень сложно писать большие ынтырпрайз приложения) т.к. требования к качеству и безопасности кода там выше.
                                    +2
                                    Ну PHP в версии 7, как раз обладает возможностями статической типизации и не компилируемый. Честно говоря, я не вижу преград в создании транслятора компилируемых языков. Те же С и С++ могут быть сконвертированы в кода на JS во многих случаях. И ещё и JS приблизился к скорости выполнения компилируемых.

                                    О качестве.
                                    if (a = b) сработает также хорошо, как и if ($a = $b). От этого защитит разве что статический анализатор или warning компилятора (если он умеет). А стат.анализаторы есть и для PHP.

                                    Возможностей же выстрелить в ногу, что на С, что на С++ и других компилируемых предостаточно. И скриптовый язык может быть даже безопаснее, потому что он в редком случае завалит(?) систему, приложение же на компилируемом языке может вызвать «BSOD».

                                    Я пришёл в PHP из мира С и С++ и понимаю, когда говорят о качестве компилируемых. Банально, их изучение даёт больше понимания того, как работает железо, на котором всё это исполняется. Но на PHP тоже можно писать очень качественный код, особенно обзаведясь типизацией.
                                      0
                                      Zephyr
                                        0
                                        А немного подробнее?
                                          0
                                          Об этом речь: https://zephir-lang.com/ Фреймворк Phalcon, как реализация
                                      0
                                      > Есть ли ЯП которые имеют статическую типизацию и не компилируются?
                                      SQL
                                      Если в чистом виде SQL по вашим убеждениям не является достаточным чтобы являться ЯП, то есть ещё хранимая логика.
                                      0

                                      врут. Сутки собирается webkit-gtk, нормальные браузеры собираются за пару-тройку часов.

                                    +3
                                    Думаю, не в компиляции дело, а в доскональном прописывании интерфейсов.
                                    Зачем, если в вебе можно «херак херак и в продакшн», и оно будет работать.
                                    Помню дикую боль при разработке веб-морды на старой Java, когда для каждой долбаной кнопки нужно было создавать свой класс с единственным перегруженным методом онклик. А потом создавать экземпляр этого класса. Зачем?
                                      0
                                      «Помню дикую боль при разработке веб-морды на старой Java, когда для каждой долбаной кнопки нужно было создавать свой класс с единственным перегруженным методом онклик. А потом создавать экземпляр этого класса. Зачем?»

                                      Это всего лишь вопрос синтаксического сахара для удобства разработки. Принципиальных проблем тут нет. Что касается именно Java, то это консервативный язык. Он долго перенимает инновации, поэтому к нему легко придираться в таких холиварных обсуждениях.
                                      0
                                      Инкрементальное компилирование не просто так сделали.
                                      0
                                      Так ведь Java. Чем плохо? Статическая типизация, сайты писать — запросто. Мейнстрим? Вот тут вопрос. Почему-то ее относят к «кровавому энтерпрайзу», вот даже автор этой статьи. Хотя абсолютно ничего «кровавого» я в Java не вижу. Не более и не менее, чем еще один язык программирования с широкими возможностями. Выучить ее в любом случае лишним не будет, так как возможности действительно очень широкие. Практически все, что может потребовать разработка — запросто. Веб — легко, десктоп — пожалуйста, мобилки — только Андроид, но все же (хотя тут не уверен, возможно есть и под другие платформы уже свои костыли, поправьте, если не прав).
                                        0
                                        Ну, насчет десктопа спорно. По-моему swing уже устарел морально. javaFX по слухам загибается тоже.
                                          +1
                                          хотя тут не уверен, возможно есть и под другие платформы уже свои костыли

                                          Есть как и конвертирование Java проекта с Андроида на Аpple, так и просто JVM для Аpple.

                                          Ну, насчет десктопа спорно. По-моему swing уже устарел морально. javaFX по слухам загибается тоже.

                                          Нет, можно делать и десктоп, просто на Java предпочитают делать вебприложения, так как обычно Java используют в бизнес секторе, а там порталы удобнее десктопов. В принципе большинство задач можно решить с помощью вебприложений, если приложение только для win, то лучше взять что-то вроде C#, если приложение требуется кросплатформенное, то пойдет и Java.
                                        0

                                        Слой REST/JSON-сервисов в web-приложениях, если удастся вывести PHP из сферы действия Apache/Nginx и поднимать как standalone сервер (типа ExpressJS, Tomcat/java, WSGI/python). Ну или в рамках Apache/Nginx запускать PHP-приложения со стадиями инициализации приложения, обработки запросов, завершения приложения (типа servlet'ов). Делать вот это все на каждый GET/POST запрос с web'а — весьма расточительно, не говоря уже о сборке HTML'а на стороне сервера. В web-разработке позиции PHP весьма сильны, но с фронта всех теснит JS — остается back.

                                          +3
                                          есть php-pm
                                            0

                                            Да, очень похоже на то, что нужно :)


                                            <?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();
                                            0

                                            Из минусов — на данном этапе он требует php-cgi для воркеров, что я считаю недостатком. Я понимаю конечно почему так было сделано — поскольку в некоторых дурных скриптах стоят проверки на SAPI, но если хочется именно через CLI — то надо писать свой менеджер процессов.

                                              0
                                              Почему недостатком?
                                              Имхо, менеджер в более менее серьезном приложении приходится в любом случае писать самому.
                                              +1
                                              А также есть amphp/aerys — не просто сервер, но и с супервизором (как php-pm)
                                              Мне кажется, что это самый развитый проект http-сервера на PHP
                                              0
                                              вывести PHP из сферы действия Apache/Nginx и поднимать как standalone сервер (типа ExpressJS, Tomcat/java, WSGI/python)

                                              uWSGI с php-плагином очень к этом близок

                                              +4
                                              Я сначала сидел на php потом зачем то, пересел на rails, а потом снова вернулся на php + Yii. Сейчас мне очень нравиться PHP + Yii, а RubyOnRails вспоминать не хочется.
                                                +1
                                                На php очень дешёвая инфраструктура, легко поддерживать проекты на Yii ( мне кажется, что именно благодаря рельсам на php появилось столько замечательных фреймворков), при этом на php 7 + Yii порог входа все же сильно ниже .Net
                                                  0
                                                  Да, Yii точно был создан по мотивам рельсов
                                                    +1
                                                    Yii — отличен, и про порог входа верно сказано. Я, не имея никакого практического опыта веб-разработки быстро въехал, и даже начал что-то делать. Но надо сказать, что у Yii, все же, неплохая документация, хотя есть и сложные (для не профессионала, по крайней мере) моменты, этого не отнять
                                                    +7
                                                    Ух ты! Сколько встречал историй ухода с php на Python+Jango или Ruby+RoR, абсолютно все они заканчивались словами «о php теперь и вспоминать не хочется!»
                                                    И вот впервые встретил хотя бы кого-то, кто сказал, что вернулся с рельсов на php и о рельсах не хочет вспоминать!
                                                      +8
                                                      А с наступлением рассвета все питонщики, рубисты, сишарперы идут на работу и пишут на пхп+битрикс ...)
                                                        0
                                                        я вам больше скажу, в последнее время, тенденция что ли формируется, обратный переход на php. Сужу по общению с работодателями, которые говорят: «мы переписываем с rails или даже java на php» Хотя может это связанно, опять таки, с относительной дешевизной рабочей силы.
                                                          0
                                                          Уходили просто в те времена, когда на PHP на самом деле было кошмарненько — большая часть проектов на самописных фрейморках, особо выделяемых общепринятых не было, те что были все допиливали по разному. В результате приходя в новый проект можно было слегка приуныть, понимая что прошлый опыт помогает лишь от части и нужно опять учиться использовать очередные инструменты, которые делают одно и тоже.
                                                            +1
                                                            Если уходили действительно, когда на PHP было кошмарненько, то приходя в Java/Spring сначала одуревали от сложности этой штуки, а потом говорили — вау, практически ничего не надо делать, само заводится и круто пашет.
                                                            Сейчас, соглашусь, переходить сейчас чуть проблемнее ибо те же фреймворки, только иначе.
                                                            +1
                                                            Про тенденции сказать не могу, но знаю несколько проектов, которые изначально создавались на Руби, а сейчас переписываются на ПХП. Примечательно, что во всех случаях основным мотивом создания на Руби было то, что на нем «невозможно писать плохой код» (до сих пор популярное утверждение среди рубистов). Но потом оказывалось, что код-то, может, и красивый, но от плохого результата это не спасает, а найти людей на поддержку и сопровождение тяжелее и дороже. А на ПХП с его низким входом не только говнокодеры плодились, но и вполне себе грамотные программеры выросли
                                                              0
                                                              Наверное сказывается выход PHP7 и информационный шум связанный с этим. Много обсуждений, разговоров. И он да, действительно получился достаточно вкусным. От расширения DS вообще пришел в полный восторг (нужны были множества, оказались, что они там работают даже быстрее, чем в Redis).
                                                          +3
                                                          ИМХО, пока в PHP можно писать как хочешь(не используя ООП и кучу других печенек), то поток «вечных новичков» в PHP не уменьшится. Но есть вопрос: ведьPython тоже не сложный, так почему там такого нет?
                                                            +4
                                                            Потому что на нём сложнее написать Hello World и мгновенно получить положительную эмоцию от того, что всё завелось. Порог входа в PHP действительно самый низкий из всех платформ на рынке. Можно просто положить файлик из одной строчки на копеечный хостинг и всё заработает само собой.

                                                            В тот же .NET, например, порог входа с точки зрения написания кода не особо выше, но всё равно зачастую новички могут не сразу врубиться, что и куда надо положить, чтобы страничка открылась.
                                                              +3
                                                              Часто, почему-то сравнивают с .net. Но копеечный хостинг и windows сервер с iis это разные категории.
                                                              Недавно проскакивала статься про 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 универсальнее и переживет много других языков, хотя идейным вдохновителем для других не был и не будет.
                                                                +14
                                                                У PHP есть ещё одно важнейшее преимущество, о котором многие профессиональные разработчики успешно забывают. Сайт на PHP — это просто набор скриптов, раскиданных по разным каталогам. Надо добавить на существующий сайт форум? Качаем движок форума, кладём его в /forum, всё мгновенно заводится. Клиенты попросили отдавать им какую-нибудь мелкую фигню в их формате? Не вопрос, пишем маленький скриптик, кидаем туда же, и он просто берёт и работает. Не надо перенастраивать сайт, не надо пересобирать весь проект, не надо ничего хитро проксировать, даже не надо ничего перезапускать, просто кладёшь файлик и он работает.

                                                                Поэтому никаких разумных альтернатив PHP для отдачи по HTTP кучи бессвязной фигни, не объединённой в общее понятие «приложение», я не вижу.
                                                                  0
                                                                  Ага, заказчики или люди из другого «лагеря» не понимают, почему я:
                                                                  — «Не хочу подзаработать и сделать маленький сайтик на wordpress, там делов-то на пару часов»
                                                                  или:
                                                                  — «Как? Ты не знаешь „1С-Bitrix!?“

                                                                  Php очень сильно расслоился на крайности между cms и symfony с doctrine. Ну и люди, там мечутся соответствующие, я бы еще третий лагерь, где-то между выделил — YII. Ничего не имею против, отличный инструмент, прям даже уникальный получился.
                                                                    0
                                                                    Можно по подробней про Yii? В чем его уникальность? Это не попытка оспаривания, а чистый интерес. Сам сейчас работаю ~1.5 месяца с Yii2.
                                                                      0
                                                                      Что на ум пришло (если подумать, можно еще придумать):
                                                                      — порог входа ниже чем у того же symfony
                                                                      — следует из предыдущего, удачно выбранные инструменты/функционал: приятный AR, ненавязчивый DI, хорошо и понятно структурирован внутри, без всякий сервисов, бандлов. Но если требуется, можно и закопаться в более advanced решениях
                                                                      — много и очень много виджетов и плагингов, причём как низкоуровневых, так и для фронтенда
                                                                      — достаточно хорошая поддержка и развитие, здесь же много информации в интернете

                                                                      Ну и от себя, я очень не люблю виджеты, но они очень экономят время разработки. Мне не нравится структура проекта по умолчанию, но ее можно менять.
                                                                        0
                                                                        Решил добавить: я прохладно отношусь к yii. За то, что для большинства разработчиков это первый фреймворк, они не знаю паттернов, антипаттернов, psr. Продолжать чужой проект на этом фреймворке — боль, прям как во времена php4. Но тогда я был моложе и лезть в чужой код было неким experience.
                                                                          0
                                                                          Вот я такой разработчик. Два-три года писал почти только на собственном CMF компании, перерос его и больше не хочу с ним работать над проектами «сложнее полугода». До этого пару лет писал либо на всяких вордпрессах, либо на голом php. В ближайшее время собираюсь начать проект на YII2 и немного беспокоюсь о том, что буду сильно велосипедить. Большинство паттернов и антипаттернов описание которых встречал вызывали реакцию «эх, это всё уже описано, а я так долго сам к этому шел через все грабли». К PSR кмк мне просто привыкнуть нужно, тем более, что к некоторым вещам оттуда как раз сам начал приходить.
                                                                          Но беспокоит то, что не знаю лучших практик и рискую вляпаться. Беспокоит, что не знаю библиотек, расширений и, скажем так, практики их применения т.е. какие там есть неявные проблемы, нужно ли заранее к этому свои обёртки написать или можно считать «верным клинком». Не знаю кода фреймворка «в глубину» и сложности которая стоит за вызовом каждого метода.
                                                                          Толкового описания таких вещей не попадалось, а сам могу это всё приобретать ещё год-два.
                                                                            0
                                                                            Серебренной пули нет.
                                                                            Идеально в твоём случае попасть в хорошую команду, где есть люди с понимание и опытом.

                                                                            Вот я не очень люблю Yii, из за того что мне кажется он уж слишком мало пропагандирует best practics программирования, типа SOLID.
                                                                            При этом я не могу сказать что, например, Symfony это прям то что нужно что бы эти практики постичь.

                                                                            Идеально на мой взгляд писать код так что бы он не зависил сильно от фрэймворка. Т.е. когда вся бизнес логика заключена не в ActiveRecord модели, как часто бывает как раз в Yii, и не в контроллерах, а в отдельном месте, и уже для этой логики используется обвязка для использования фрэймвоком этого когда.
                                                                            А вот как это написать, может сказать только опыт и хорошая команда, в которой такие вещи можно обсудить.
                                                                              +1
                                                                              Насчёт отделения кода от фреймворка и библиотек как раз думал. Раз уж не я один такой, то и сомнения прочь. Спасибо. upd: Сейчас вспомнилось как прошлой осенью очень пожалел, что не делал так.
                                                                              А с командой печаль. Сейчас, можно сказать, один работаю (если клиента, ПМ и маркетологов не считать). Иногда перед кем-то из удалёнщиков в роли живой документации и справочника «а как тут вот такое сделать?» выступаю, вот и всё взаимодействие. Можно было бы место работы сменить, да не хочется, полюбил уже всё. Так что как всегда всё самому.
                                                                                +3

                                                                                Как жаль что люди не собираются в уютных чатиках и не филосовствуют на тему "как делать хорошо".

                                                                                  0
                                                                                  Сидят. Сижу в таком чате по D https://telegram.me/dlangru
                                                                                  Можно и по PHP такой создать, но мне кажется там бардак будет.
                                                                                    +1

                                                                                    https://telegram.me/prophp7 — тут душевненько. Ну и там есть смежные ссылки еще на чатики забавные.

                                                                      +1
                                                                      Вы, кажется, застряли в 90-х. В любом современном PHP-приложении, как правило, единая точка входа и «нормальный» роутинг.
                                                                        +12
                                                                        Что не мешает поставить форум в подкаталог.
                                                                          0
                                                                          Действительно?

                                                                          Это в любом фреймворке единая точка входа.
                                                                          +1
                                                                          Я примерно то же самое писал несколько месяцев назад, но был заминусован. :)
                                                                            +1
                                                                            Отлично подмечено про отдачу кучи бессвязных данных по HTTP не объединённых в «приложение». PHP скрипты по разным папкам — это же микросервисы!
                                                                        0
                                                                        пока в PHP можно писать как хочешь(не используя ООП и кучу других печенек), то поток «вечных новичков» в PHP не уменьшится
                                                                        Нас всегда удивлял этот «парадокс».
                                                                        Хочется сложностей? Выбирай яву и ныть по поводу наличия новичков не надо будет.
                                                                        Что за то ли эгоизм, то ли садомазохизм — выбирать язык где новичков по определению много, а потом ныть по поводу их наличия и требовать «усложнить» язык, что бы новичков оттуда выгнать?
                                                                        Типичное «залез в монастырь со своим уставом». Ну хочешь сложного языка — выбирай сложный, зачем выбирать простой и прогибать его под себя требованиями усложнить?
                                                                          0
                                                                          А если в твоем городе есть вакансии только под этот язык? В том числе и джуниор позиции? И уехать никак?
                                                                            +7
                                                                            Тогда возможно стоит купить в магазине книгу об интернете и узнать наконец о возможности удалённой работы. Особенно если речь о веб-вакансиях.

                                                                            p.s.: «уехать никак» это всегда не более чем повод остаться, когда уезжать не хочется. Если Вы конечно не в колонии поселении отбываете.
                                                                              0
                                                                              Кто же удаленно возьмет на работу человека без опыта?
                                                                                +4

                                                                                Фриланс это тоже удаленная работа, а в фрилансе и без опыта можно получить проект вопрос только в оплате.

                                                                                  0
                                                                                  Легко. Создайте пару проектиков, аля магазинов, чисто для себя. И ставьте их в портфолио. Вот и опыт уже есть и легче искать заказы. Я лично уже несколько лет только за счет фриланса и живу и абсолютно пофиг где территориально находиться, лишь бы интернет нормальный был.
                                                                                    0

                                                                                    Желательно еще дать эти проектики на ревью (они ж для себя, не под NDA). Благо нынче сложностей с этим нет.

                                                                                      –1
                                                                                      Если цель зарабатывание на фрилансе, то рефакторинг это лишнее. Тут главное побыстрее наклепать то что хочет заказчик, а качество кода второстепенно. Чем меньше потратишь на проект времени, тем больше в итоге заработаешь. Я лично не парюсь над качеством кода, поэтому код никогда не рефакторю. Правда у меня школа хорошая была — несколько лет в иностранной компании проработал, где делали ревью всего моего кода, и отправляли на рефакторинг если что-то не нравилось. Поэтому имхо у меня сейчас получается достаточно качественный код, так как натаскали меня, но качество кода вообще для меня на десятом месте.
                                                                                        +3
                                                                                        Если цель зарабатывание на фрилансе, то рефакторинг это лишнее.

                                                                                        Смотря что подразумевать под "рефакторингом". Речь идет о поддержании уровня технического долга на нужном уровне. Если говнокод изолирован — он не приносит много боли. А без опыта "изолированности" не выйдет.


                                                                                        Правда у меня школа хорошая была

                                                                                        Я рекомендую вам, когда вы даете подобные советы, начинайте с этого. Когда опыт есть и есть понимание "что есть хорошо и что есть плохо, и когда нужно делать плохо" — это одно. А когда новичку говорят "да пофигу на качество главное фигачить побольше" потом начинаются проблемы.


                                                                                        Именно о том что бы "натаскать" и был мой совет. Написали проект, скинули на ревью. Или попросить какого-нибудь человека "внести изменения в требования" что бы проверить насколько код плох. Что бы не услышать потом от заказчика "почему так долго? Почему так много багов? Это ж просто кнопку добавить нужно было!"

                                                                                      0
                                                                                      А можно узнать, на чем вы пишете и на какой бирже работаете(вангую Upwork)?
                                                                                        0
                                                                                        Yii2, fl.ru. Честно, не понимаю почему на хабре эту биржу не любят. Одно дело, что качество кода их сайта низкое, но ведь не ради этого фриланс биржами пользуются. Но зато заказов там навалом, поэтому там и сижу. Единственная русскоязычная биржа с таким количеством заказов. Upwork пробовал, но там конкурировать с индусами очень сложно и как не парадоксально но на fl.ru в этом плане всё на порядок лучше, т.к. практически сразу реально найти заказ.
                                                                                          0
                                                                                          почему на хабре эту биржу не любят
                                                                                          Несколько взломов с раскрытием данных, неадекватное разрешение СБР, конские тарифы на всё, мониторинг личных сообщений администрацией, безосновательные задержки выплат денег и так далее — можете почитать на фл.ру в блогах отзывы пользователей.
                                                                                          Ах да, не можете, когда пошло много объективных негативных отзывов в блогах — их снесли на фиг безвозвратно.
                                                                                            0
                                                                                            Ну, я не спорю, не без недостатков конечно. Но факт остается фактом, там сейчас больше всего заказов в русскоязычном сегменте, поэтому особо выбирать не приходится. По раскрытию данных, у меня там нет никаких личных секретных данных, кроме яндекс кошелька для вывода денег, поэтому я особо и не опасаюсь. Выплату лично мне еще ни разу не задерживали, даже впервые о такой проблеме слышу. Лично для меня единственный недостаток это конские тарифы на «ПРО», а в остальном жить можно.
                                                                                              0
                                                                                              А зачем зацикливаться на русскоязычном сегменте, тем более с многолетним стажем в иностранной фирме? Иностранные биржи во многом лучше.

                                                                                              Раскрытие личных данных сыграло роль не самим фактом раскрытия, сколько полнейшим бардаком снизу доверху который этот взлом вскрыл.
                                                                                              А для нас лично мониторинг ЛС администрацией, при чем не особо скрывавшийся, поставил жирнющий крест на проекте.

                                                                                              Хотя в свое время мы были достаточно активными его пользователями.
                                                                                                0
                                                                                                Ну пока есть пул постоянных клиентов, плюс новые клиенты появляются, поэтому особой необходимости, по крайней мере сейчас, уходит на запад нет. Ну и общение на иностранном языке лично у меня вызывает дискомфорт, не смотря на то, что в иностранной компании приходилось постоянно писать отчеты на английском языке. То есть просто личные предпочтения и пока особой потребности в западных заказчиках нет.
                                                                                                  0
                                                                                                  есть пул постоянных клиентов
                                                                                                  Так и работать с ними напрямую, а не через фл.

                                                                                                  необходимости, по крайней мере сейчас, уходит на запад нет
                                                                                                  В нулевых не было смысла работать на россию, на западе платили на порядок больше. Постепенно уровень оплаты выровнялся, где-то к 8 году был достаточно близок, но 14 год отбросил российские уровни оплаты в 2 раза.
                                                                                                    0
                                                                                                    Ну со старыми клиентами напрямую и работаю. Новых же нахожу на фл.ру.
                                                                                                    Да, я в курсе про цены. Но как выше писал, мне было очень сложно на Upwork конкурировать с индусами, а всё что в итоге предлагали даже у нас стоит дороже. Поэтому для себя особого смысла работать на запад не вижу, если только найти нормальную компанию и работать чисто на нее удаленно.
                                                                                  –1
                                                                                  Интересно, а что может быть причиной прям что «уехать ни как»? (кроме как ни хочется)
                                                                                    0
                                                                                    Имхо, не мало причин может быть. Лично я цель — «уехать», никогда не ставил. Но, например, у меня жена ни в какую не хочет уезжать жить далеко от родителей, поэтому даже если бы я захотел уехать, это было бы очень сложно осуществить из-за жены :)
                                                                                      0
                                                                                      Подписка о невыезде? )
                                                                                      0
                                                                                      Вот кстати да. Очень верно подмечено.
                                                                                        0
                                                                                        Ну, «уехать никак» — это обычно гипербола.
                                                                                      0
                                                                                      Никто не заставляет на пхп писать «по-сложному», брать какой-нибудь фреймворк.
                                                                                        +1
                                                                                        Да и не все фреймворки прям таки ужас-ужас монстры с килотоннами документации для написания хелловорлда.
                                                                                    0
                                                                                    Именно из-за того, что порог входа был низкий, а теперь надо сильно перестраиваться.

                                                                                    Скорее из-за банальной лени. Кто хочет идти вперед, тот не стоит на месте. Наблюдается та же самая песня в мире 1С при переходе от использования обычных к управляемым формам. Кому-то удобнее сидеть в теплом и обжитом болоте, а кто-то перестраивает себя и свое окружение.

                                                                                      0
                                                                                      Есть еще один вариант: за эти годы разработчик выработал определенные привычки написал себе собственный мини-фреймворк, которого для задач его уровня вполне хватает, и переучиваться на большие смысла нет: в плане результата получаем примерно то же, но свое все же удобнее тем что свое. (Мой случай как раз.)
                                                                                        +3

                                                                                        Вы поддерживаете все написанные вами проекты? Если да — то ок. Если нет, то для "других" разработчиков "ваше" будет "чужим" и чем больше вы делаете "для себя" тем хуже вы делаете бизнесу, внося огромные риски при поддержке. Да, риски могут не оправдаться (вдруг "ваше" на самом деле неплохое), но всеже.

                                                                                      +7
                                                                                      Ну следующим шагом должен быть уже async-await, наконец. Ядро почти к этому готово, осталось event loop встроить в язык, планировщик и библиотеку примитивов для кантования промисов туда-сюда. (Надеюсь, их назовут промисами здесь.)
                                                                                        0
                                                                                        Не думаю, что async/await появится раньше версии 8.0
                                                                                        В 2015-м году было обсуждение в php internals. Длинное, тяжёлое.
                                                                                        https://www.mail-archive.com/internals@lists.php.net/msg80837.html
                                                                                          +2
                                                                                          Ну почему оно «тяжелое», вроде бы обычный и даже типичный спор между теми, кто понимает, о чем идет речь, и теми, кто не очень. Главное, Дмитрий Стогов настроен позитивно (как мне показалось). Надеюсь, что все же реализуют в первую очередь из следующих больших вещей, потому что иначе опасно… скоро язык без async-await будет так же восприниматься, как язык без… в общем, как Фортран. :)
                                                                                        +6

                                                                                        Следующим шагом должна стать нормальная, последовательная библиотека. С последовательным порядком аргументов. С последовательным наименованием, а не mysql_query и htmlspecialchars. Не быть тонкой обёрткой над C, и вообще с нормальными абстракциями, а не mysql_real_escape_string. С нормальными обобщениями, а не кучей функий sort/ksort/krsort/usort и так далее.


                                                                                        Пора чистить мусор и выкинуть вот это всё легаси. Тем более, раз уж всё равно порог входа вырос, как вы утверждаете.

                                                                                          +4
                                                                                          Для баз уже все ползьуются PDO
                                                                                          А вот сортировка да, там всё хаотично
                                                                                            0
                                                                                            в PDO тоже есть щепотка хаоса, которая вынуждает использовать ту же доктрину, например.
                                                                                              0

                                                                                              я понимаю, так вот стоит выпилить тогда из ядра, чтобы остался только PDO

                                                                                                +3
                                                                                                Так их и выпилили в 7.0
                                                                                              0
                                                                                              С одной стороны я приветствую приведение всех тех тонн функций к консистентному виду. Как сказал один программер:
                                                                                              array array_filter ( array $input [, callable $callback = "" ] )
                                                                                              array array_map ( callable $callback, array $arr1 [, array $… ] )
                                                                                              Это нельзя понять. Это можно только запомнить

                                                                                              С другой стороны это будет уже не php. Сейчас ещё довольно многие скрипты, написанные под php4, можно запустить под php7.1. Да, скорей всего придётся поправить deprecated и т.д.., но переписывать КАЖДЫЙ вызов КАЖДОЙ функции не придётся. А в случае такой радикальной чистки авгиевых конюшен придётся править и все-все исходники, написанные даже под 7.1. На такой радикальный и резкий слом никто не пойдёт.
                                                                                                0

                                                                                                Это переход по смыслу эквивалентен переходу на Py3. Да, некоторое, довольно длительное время, будет два варианта, в старый не вносить новые фичи, чтобы разработчики потихоньку переходили на новый.

                                                                                                  +1
                                                                                                  Вот, мне кажется, пример питона как раз (в том числе) и удерживает создателей языка от такого резкого масштабного изменения. Причём, раз уж его не сделали в php7, когда всё равно резко и масштабно многое поменяли, мне кажется, уже и не сделают. Революционно не сделают. Возможно, сделают эволюционно, за много версий.
                                                                                                  0
                                                                                                  Всегда думал: а что мешает создать параллельно специальные объекты для управления стандартными типами.
                                                                                                  К примеру:
                                                                                                  <?php
                                                                                                  $var = array(5, 444, 121);
                                                                                                  $var_obj = new SplArrayWrapper($var);
                                                                                                  $var_obj->map('someFunction');
                                                                                                  ?>
                                                                                                  

                                                                                                  То есть, создать специальные оболочки, построенные более грамотно и последовательно, но при этом не нарушающие совместимость?
                                                                                                  Ну, как минимум в моем примере идет оверхед на создание нового объекта, но все же, что мешает применять похожий подход?
                                                                                                  Я понимаю, подобную оболочку можно написать за пару часов на PHP, но намного большей производительности можно было бы достичь, если написать код на C.
                                                                                                  Недостатки, которые я вижу — это еще большая фрагментированность, так как часть кода будет на новых функциях, часть — на старых, и при этом будут возникать кое-какие различия между ними в принципах работы…
                                                                                                  Но все же, это лучше, чем рубить с плеча совместимость со старым кодом.
                                                                                                  Ну или мириться с тем, что без подсветки параметров функций никогда не можешь быть уверенным, где haystack, а где — needle, что раздражает в современном PHP чуть ли не больше всего
                                                                                                    0
                                                                                                    https://github.com/nikic/scalar_objects
                                                                                                    подобное уже есть
                                                                                                      +1
                                                                                                      Да, конечно, это интересная реализация и уверен, существует с десяток отличных библиотек на PHP. Но это — расширения и внешние библиотеки, а я размечтался о подобном в стандартной поставке PHP и написанное на C.
                                                                                                  +4

                                                                                                  функции аля 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 {
                                                                                                     // по аналогии
                                                                                                  }
                                                                                                  

                                                                                                  Я часто вижу вот такое вот "надо переименовать" но никто не переименовывает почему-то.

                                                                                                    –1

                                                                                                    Функция сортировки должна быть ОДНА и она должна быть универсальной, с сигнатурой вида:


                                                                                                    sort(seq, compare_func)


                                                                                                    Порядок сортировки, способ сравнения аргументов (что там, массив целых? Массив хешей и сортируем сначала по полю "size" а потом, если совпало, по полю "weight"? Что угодно) задаётся compare_func, которая принимает два объекта и для них выдаёт ответ: 1 если arg2 должен стоять после arg1, 0 если они равны и -1 если arg2 должен стоять до arg1 в отсортированном массиве.


                                                                                                    Для PHP есть примечание — в нём массивы — не массивы, а смесь из массивов и словарей, поэтому в данном случае у коллбек-функции может быть не два, а четыре аргумента — k1 v1 k2 v2, где k — ключ аргумента, v — значение; остальное по-прежнему.


                                                                                                    А уж если вспомнить, что есть лямбды, так этот подход вообще идеален. Они как раз и придуманы специально для таких случаев.

                                                                                                      0
                                                                                                      вообще-то в php уже есть usort
                                                                                                      правда нет стандартных compare_func для неё
                                                                                                        0

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

                                                                                                        0
                                                                                                        Функция сортировки должна быть ОДНА и она должна быть универсальной, с сигнатурой вида:

                                                                                                        Ну так сделайте обертку на PHP и распространяйте как composer пакет. Вам же никто не мешает.


                                                                                                        А уж если вспомнить, что есть лямбды, так этот подход вообще идеален.

                                                                                                        Еще бы каррирование нормально можно было бы делать, вообще б зажили. А еще что бы лексические скоупы а не "один скоуп где все живет и локальный куда надо через use явно копировать".

                                                                                                          +1
                                                                                                          Думаю, лучше наоборот сделать — привести язык в порядок, и сделать composer пакет или расширение, которое включает старые названия.
                                                                                                            0

                                                                                                            Можно организовать к версии 8.0. RFC и вперед.

                                                                                                            0

                                                                                                            В семёрке (только на ней проверял) можно осуществить такой вызов:


                                                                                                            (func(...$args))(...$args);

                                                                                                            То есть почти как в JavaScript, но с дополнительными скобочками.

                                                                                                          –1
                                                                                                          А что именно вам тут не нравится? У каждой функции свое поведение. Нужно сортировать ключи — юзаем ksort. Реверсивная сортировка по ключам — rksort.

                                                                                                          Есть массив клиентов, как их отсортировать так, чтобы вначале шли вип-клиенты, а потом обычные. Далее отсортировать по именам?
                                                                                                          clients.OrderByDescending(c => c.IsVip).ThenBy(c => c.Name)
                                                                                                          
                                                                                                            0
                                                                                                            // 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.

                                                                                                            0
                                                                                                            По поводу JIT — это есть у jphp. Вообще он больше предназначен для «GUI на пыхапе», но вроде и для сайтов тоже подходит.
                                                                                                              +1

                                                                                                              Это есть и в обычном php в веточке jit в репозитории от zend tech, внутри расширения opcache =)

                                                                                                          +2
                                                                                                          На мой взгляд, порог входа в PHP в целом вырос из-за того, что получили широкое распространение фрэймворки типа Symfony, Laravel, Yii и др., которые побуждают писать красивый код в ООП-стиле и изучать лучшие практики ООП. Причем фрэймворки активно и своевременно обновляют свои версии под новые версии PHP. Но это верно в основном только для PHP-фрэйморков. Если взять тот же Wordpress (или некоторые другие CMS), то ситуация здесь иная. Глядя на код ядра CMS в некоторых местах и многих плагинов под него иногда волосы дыбом встают. Там просто «лапша» из HTML и PHP, смешанного в самых неожиданных местах. Плюс в качестве основной версии языка выбирается не самая свежая, а 5-10 летней давности, потому что иначе теряется обратная совместимость. В целом экосистема PHP в последние годы переняла лучшее из опыта других языков и платформ и (что радует!) продолжает это делать.
                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                              0

                                                                                                              Зато в UTF-16 всегда прилетает 2 байта, а в случае UTF-8 может прилететь как 2, так и 1 байт, как повезет.


                                                                                                              Поэтому мне тоже кажется, что проще работать с UTF-16 чем с 8, и я тоже удивлен почему разрабы считают иначе.
                                                                                                              Кто в теме, может объяснить?

                                                                                                                0
                                                                                                                Не всегда. Иногда символ может выражаться двумя 16-битными словами https://ru.wikipedia.org/wiki/UTF-16
                                                                                                                  +2
                                                                                                                  Почему всегда? В utf-16 же может прилететь один символ в 4 байта.
                                                                                                                  Фиксированная ширина юникода — это только UTF32
                                                                                                                  В utf8 может существовать символ из 1, 2, 3 или 4 байт. Последний ли это байт в последовательности — определяется по крайнему биту (старшему или младшему — простите, я их вечно, откуда их надо считать)
                                                                                                                    0

                                                                                                                    Да, был не прав, спасибо за прояснение.

                                                                                                                    0
                                                                                                                    Поэтому мне тоже кажется, что проще работать с UTF-16 чем с 8

                                                                                                                    Почитайте почему PHP6 не взлетел

                                                                                                                  +2
                                                                                                                  В 7.1 приняли очень спорное решение выпилить настройку mbstring_overload. Кто не в курсе, она прозрачно заменяет однобайтовые строковые функции на многобайтовые.
                                                                                                                  До сих пор юзается куча легаси-кода, которая не знает про многобайтовые кодировки, но с этой магией нормально работает. Да что там легаси, тот же битрикс штатно работает на этой фигне.
                                                                                                                  Самое плохое, что нормальной замены до сих пор нет. Есть куча корявых функций из расширения mbstring, типа mb_substr вместо substr. Но оно не является нормальной заменой, так как а) для ряда функций типа регулярок (тот же preg_replace) замены 1-в-1 просто нет; б) часть вещей типа строка-как-массив ($str[2]) в принципе не заменяемая и в) заменить все строковые функции из всех используемых либ, шаблонов и т.д. — то ещё развлечение на тему рефакторинга.
                                                                                                                  То есть я бы понял, если бы они сначала запилили нормальные многобайтовые строки в ядро, а потом уже воевали с костылями. Но нет.
                                                                                                                  Поэтому, мне кажется, PHP надолго застынет в версии 7.0.
                                                                                                                    0
                                                                                                                    Тот же preg_replace умеет сам в юникод. Модификатор u только указать
                                                                                                                      0
                                                                                                                      Особенно качественно он в него умеет, если таки включен mbstring.func_overload
                                                                                                                      (дисклеймер: не пытайтесь это повторить в реальном проекте)
                                                                                                                        +1
                                                                                                                        Вот видите, без подмены функций одной проблемой меньше )
                                                                                                                        А с третьим пунктом: увы, неизбежная расплата за изначальную завязку на костыли.

                                                                                                                        Эх, ещё бы setlocale кто-нибудь догадался выпилить.
                                                                                                                      0
                                                                                                                      Я бы еще дополнил, что в этом наборе функций есть много баг которым уже по многу лет, но не исправлены до сих пор (с ходу что вспоминается, это перевод регистров букв). И получается, что вроде начинаешь использовать, наталкиваешься на такую багу, плюешься и допиливаешь в свое приложение фикс. Потом проходит время, уже и минорных версий несколько сменилось, начинаешь юзать и опять бац… баги все там же. В общем да, хочется уже нормально с юником работать из коробки.
                                                                                                                      +4
                                                                                                                      Мне кажется, PHP жив и будет пока жить, потому что за эти лет 15 накопилась огромная база написанных сайтов, к тому же выросло большое количество PHP-разработчиков. Новые проекты начинают писать на PHP, потому что найти среднего уровня разработчика не так сложно и стоить он будет в среднем дешевле.
                                                                                                                      PHP сейчас пожинает плоды так сказать своей былой и бурной популярности.

                                                                                                                      Но эта гонка языка за Java ни к чему хорошему не приведет. Разработчики обучившись ООП, DDD, TDD итп в PHP потом начинают переходить на сам Java, потому что там возможностей на порядок больше. А те, которые хотят что попроще, смотрят в сторону Gо, Python, может JavaScript.

                                                                                                                      Поэтому с трудом верится в светлое будущее PHP. А вспомнить его исходники и муки написания расширений(по сравнению с ffi того же Python), так вообще перекреститься хочется.
                                                                                                                        +2
                                                                                                                        Знаю людей которые, в своё время, отказались переходить на Java и решили сменить место работы, когда проекты на php закончились.

                                                                                                                        Лично мне, когда нужно написать какой-то код на Java — жутко бесит. Как-то переносил кусок кода из Java в PHP — в итоге, задумавшись, строк 100 Java кода заменил одной строкой PHP.
                                                                                                                          0
                                                                                                                          Лично мне, когда нужно написать какой-то код на Java — жутко бесит. Как-то переносил кусок кода из Java в PHP — в итоге, задумавшись, строк 100 Java кода заменил одной строкой PHP.

                                                                                                                          Такое бывает только если плохо знать Java (и хорошо на PHP), на ней тоже можно писать быстро и коротко, другое дело что для этого нужно её довольно неплохо знать.
                                                                                                                          0
                                                                                                                          Разработчики обучившись ООП, DDD, TDD итп в PHP потом начинают переходить на сам Java, потому что там возможностей на порядок больше. А те, которые хотят что попроще, смотрят в сторону Gо, Python, может JavaScript.


                                                                                                                          Вы не поверите, но есть и те, кому множество возможностей Java (как вариант C#) кажутся излишними, но тянущими лишний оверхид (хотя бы в виде необходимости компиляции), но «попроще» тоже не устраивает, хочется многоуровневых абстракций, инкапсуляции, сокрытия и т. п… Из скриптовых языков PHP больше всех, субъективно, подходит для ентерпрайза и как язык, и как экосистема. Только одна Doctrine даёт огромную фору по сравнению с другими скриптовыми языками. В экосистемах Ruby и Javascript ничего подобного нет, в Python — похожа sqlalchemy, но по защите данных PHP уже как язык отрывается.
                                                                                                                          +2
                                                                                                                          Когда уже, в конце концов, эту КДПВ запретят Женевской конвенцией…
                                                                                                                            –18
                                                                                                                            PHP как был fractal of bad design, так им и остался. Делать на нем что-то можно, но не нужно.
                                                                                                                              –9
                                                                                                                              Минусующие, вы хотя бы понимаете, что у вас стокгольмский синдром?
                                                                                                                                +3
                                                                                                                                А у вас отсутствие не только весомых, но и аргументов вообще. Зачем был написан комментарий?
                                                                                                                                  –3
                                                                                                                                  Все аргрументы давно известны: PHP: a fractal of bad design
                                                                                                                                  PHP имел понятную нишу в эпоху shared hosting, сейчас смысла в этом «языке» нет.
                                                                                                                                    +2
                                                                                                                                    Статья 2012-го года. С тех прошло больше 4-х лет. С тех появились вышли версии 5.4, 5.5, 5.6, 7.0, 7.1
                                                                                                                                    PHP шагнул далеко вперёд.

                                                                                                                                    Нет, ну некоторые момент остаются актуальными: неконсистентная стандартная библиотека функций, неконсистентная последовательность аргументов (haystack-needle). Но вещи, которые там описаны постепенно становятся неактуальными. Посмотрите сколько было задепрекейчено к релизам 7.0, 7.1, 7.2
                                                                                                                                    И это всё постепенно отпиливается.

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

                                                                                                                                    Зря вы так яростно апеллируете к этой уже очень старой статье.

                                                                                                                                    З.Ы.
                                                                                                                                    Очень надеюсь, что когда-нибудь этот RFC воплотят в жизнь (скорее всего, к версии 8.0): https://wiki.php.net/rfc/consistent_function_names
                                                                                                                                      –1
                                                                                                                                      Есть кривая технология, которую пытаются выпрямить.
                                                                                                                                      Зачем тратить время на изучение/применение кривой технологии, если можно взять что-то сразу нормально сделанное?
                                                                                                                                        +2

                                                                                                                                        Да любая прямая технология начиналась с кривого глючного hello, world-а. Если PHP выпрямят, будет только лучше. А фанатизм вида "говно всегда останется говном" как раз наоборот, ни к чему хорошему не приводит.

                                                                                                                                          –2
                                                                                                                                          Если сравнивать именно с php, то не любая.
                                                                                                                                          И я видел какой код пишут php программисты, и как кривизна языка отражается на них.
                                                                                                                                          В 2016 году есть альтернативы, поэтому начинать что-то делать на php довольно странно.
                                                                                                                                            0

                                                                                                                                            А ну-ка? Вот простой класс сообщений: https://gist.github.com/SerafimArts/798adfa04844bc3b311620a930c7727a чем этот код отличается от джавовского или шарпеца, например? Ну за исключением того, что он на порядок лаконичнее. Где эти хвалёные "костыли", которых я из-за "замыленного" глаза просто не замечаю?

                                                                                                                                              0

                                                                                                                                              P.S. Если не найдёте — это некоторый повод задуматься на тему: "Может вы видели код совсем даже не программистов, а любителей, которых в любом языке предостаточно?"

                                                                                                                                                +1
                                                                                                                                                Ну за исключением того, что он на порядок лаконичнее. Где эти хвалёные «костыли», которых я из-за «замыленного» глаза просто не замечаю? Ну за исключением того, что он на порядок лаконичнее.

                                                                                                                                                Банально:
                                                                                                                                                 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 и созданий лишних переменных. Так что
                                                                                                                                                на порядок лаконичнее.

                                                                                                                                                Крайне спорно.
                                                                                                                                                  0

                                                                                                                                                  удалено

                                                                                                                                                    0

                                                                                                                                                    В пыхе это тоже можно заменить, например на return static $rendered = $this->injectParameters(...);, что будет ещё короче, но плохо с точки зрения качества кода.


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

                                                                                                                                                    0
                                                                                                                                                    Вы приводите один класс, к-й почти ничего не делает. Что это должно показать?
                                                                                                                                                    Я, например, видел как люди писали в лог без таймстэмпа, то есть элементраные вещи делали криво.
                                                                                                                                                      0

                                                                                                                                                      Так эти люди и в django не встроенный механимз логирования (модуль python logging) будут использовать, а писать в текстовый файлик без таймстампа. Язык-то тут при чём?

                                                                                                                                                        0
                                                                                                                                                        Язык при том, что люди привыкшие к тому, что есть http запрос и магически сформированные глобальные массивы, плохо понимают все что выходит за эти рамки.
                                                                                                                                                        А современный бэкенд это далеко не всегда обработка http запроса.
                                                                                                                                                        0

                                                                                                                                                        Ну так я и показываю пример только того, что какие-то косяки языка — довольно стереотипны, при этом явно написал об этом, парируя утверждение про то "зачем M, если есть N". Так же явно упомянул, что если вы сталкивались с любителями — это не значит, что все такие.


                                                                                                                                                        А отвечая на ваш пример, могу даже сообщить, что в пыхе есть рекомендация (которую в 2016ом году можно считать стандартом) по реализации логгирования: http://www.php-fig.org/psr/psr-3/ И соответсвующая популярная либа, реализующая PSR-3: https://github.com/Seldaek/monolog/tree/master/src/Monolog/Handler То, что кто-то делал логи без даты как раз и говорит об уровне знаний ваших знакомых, а не о языке и его сообществе.


                                                                                                                                                        В каком ещё языке есть интерфейс логгирования на уровне почти что стандарта? Где написаны адаптеры под все возможные популярные APM и сервисы? И да, они с таймстампом.

                                                                                                                                                          0
                                                                                                                                                          Вы говорите, что если сильно прищурить глаза, то php будет похож на java. Ну офигеть теперь.
                                                                                                                                                          Эти любители проходили собеседование и получали зарплату, так что не нужно додумывать.
                                                                                                                                                          Например, в python модуль logging входит в стандартную библиотеку.
                                                                                                                                                      –1
                                                                                                                                                      А на чем лучше стартовать проект, имея опыт PHP и не имея опыта другого серверного языка? :)
                                                                                                                                                        0

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


                                                                                                                                                        Короче, считайте, что если вы хотите не наговнокодить по-быстрому, а реально делать проект по-человечески, у вас нет опыта нового PHP. И далее — см. рис. 1

                                                                                                                                                          0
                                                                                                                                                          Я как бы уточнял на
                                                                                                                                                          В 2016 году есть альтернативы, поэтому начинать что-то делать на php довольно странно.


                                                                                                                                                          К чему Ваша писанина, я хз. :)
                                                                                                                                                            +2

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


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


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

                                                                                                                                                              +3

                                                                                                                                                              Прошу заметить, что процентов 80% этих вредных советов из прошлого PHP являются стандартной практикой, например на JS + Node в настоящем. Да, конечно, некоторые неактуальны в связи с наличием commonjs, манки-патчинга и прочих штук, но в целом ведь картина примерно такая же, нет?… Открываешь сырцы какого-нибудь JQuery (до компиляции т.е.) и вспоминаешь времена тысяч реквайров и чистой процедурщины на пыхе 4, ностальгия ;)


                                                                                                                                                              Я веду к тому, что языки, где все архитектурные тупики уже обкатаны и очевидны, а инструментарий на порядок превосходит более молодые альтернативы (и не обязательно JS, просто пример) — скорее наоборот является плюсом.

                                                                                                                                                                0
                                                                                                                                                                Сравнивать JQuery и PHP — как бы не совсем правильно. :)
                                                                                                                                                                  0

                                                                                                                                                                  Сравнивать подходы в одном языке и в другом, а не сравнивать либу с языком. =)


                                                                                                                                                                  Как давно вы в php видели код подобного вида? А в JS?


                                                                                                                                                                  <?php
                                                                                                                                                                  return (function() {
                                                                                                                                                                      function a() {
                                                                                                                                                                          // ...
                                                                                                                                                                       }
                                                                                                                                                                  })();
                                                                                                                                                                    0
                                                                                                                                                                    В мире PHP слабо используют функциональную парадигму. :)

                                                                                                                                                                    В исходниках JQuery — дерьмо (из-за ограничений языка)?
                                                                                                                                                                    Сейчас или в году эдак 2008? :)
                                                                                                                                                                    В JS тоже много нового с 2008 года.
                                                                                                                                                                      0

                                                                                                                                                                      Там 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% пакагиста содержит код подобного уровня.

                                                                                                                                                                        0

                                                                                                                                                                        P.S. Хотя, начиная с 579ой строки в ангуларе начинается просто неперевариваемая дичь без единого комментария "зачем и почему", достигающая апогея к 1000ой. Макконнелл переворачивается в кровати, бедняга.

                                                                                                                                                                          –1
                                                                                                                                                                          Там ES6, какие ограничения языка при наличии бабела, вы что? =)

                                                                                                                                                                          Так к чему было это? :)
                                                                                                                                                                          Открываешь сырцы какого-нибудь JQuery (до компиляции т.е.) и вспоминаешь времена тысяч реквайров и чистой процедурщины на пыхе 4, ностальгия ;)

                                                                                                                                                                          Что не так с исходниками JQuery?
                                                                                                                                                                          JQuery использует бабель?

                                                                                                                                                                          Значит Ангуляр и Аурелию писали php-программисты :)
                                                                                                                                                                          Ну и то не JS, а TS. :)
                                                                                                                                                                  –1
                                                                                                                                                                  Бред.

                                                                                                                                                                  Тогда ни у кого нету якобы релевантного опыта на php7.

                                                                                                                                                                  Всем бросать из-за этого php и писать на чем-то другом?

                                                                                                                                                                  В своем же рассуждении Вы отконились от первоначального вопроса.

                                                                                                                                                                  По другим языкам тоже куча мусора гуглится.
                                                                                                                                                                  А в том же питоне и вовсе 2 актуальные НЕСОВМЕСТИМЫЕ ветки, старая никак не умрет.
                                                                                                                                                                  Возможно и в других языках такое.

                                                                                                                                                                  Ну и мусор гуглился в 2000-ых.
                                                                                                                                                                  Тогда параллельно существовали PHP 4 и 5.

                                                                                                                                                                  Ну и не ответили на каком же языке стартовать проект.

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

                                                                                                                                                                  Что характеризует преобладающее стадо на ресурсе.
                                                                                                                                                                0
                                                                                                                                                                Чтобы капитально не переучиваться, нужно было переучиваться плавно, с релизом, а ещё лучше хотя бы с RC каждой значимой версией. И за тем, что в экосистеме творится следить постоянно, а не так что писал-писал на PHP3 «с нуля», а тут бац и на 7.1 решил перейти с композером и симфоней или зендом.
                                                                                                                                                                  0
                                                                                                                                                                  Чтобы капитально не переучиваться

                                                                                                                                                                  Неправильная постановка вопроса.

                                                                                                                                                                  А зачем вообще переучиваться? Почему это стало догмой?

                                                                                                                                                                  Старый код продолжит работать, нужно поправить чуток deprecated, но это было и между минорными релизами.

                                                                                                                                                                  Кому нужны новые фичи, пускай учат.
                                                                                                                                                                  Какие это фичи? Строгая типизация? Чего там ее учить? :)

                                                                                                                                                                  Сложно не учить, сложно программировать в строгой типизиции.
                                                                                                                                                                  Именно из-за нестрогой типизации PHP и выстрелил.

                                                                                                                                                                  А сейчас в язык пришла куча академиков, которые пытаются сделать из него Java.
                                                                                                                                                                  Большинству это просто не нужно.
                                                                                                                                                                    +2
                                                                                                                                                                    Например, если компания в которой ты поддерживал проект на PHP3, решила его закрыть. Пускай он даже крутился последнее время на PHP5.6 фактически, может даже $a = [1,2,3] использовал, но ООП не использовал вообще. Очень маловероятно, что легко найдешь работу на современном рынке без переучивания — и тут не просто deprecated и syntax sugar надо выучить, а начинать в других парадигмах программировать, забыв процедурную с глобальными переменными как страшный сон.
                                                                                                                                                                      0
                                                                                                                                                                      PHP3

                                                                                                                                                                      Как всегда пример слабо связанный с реальностью. :)

                                                                                                                                                                      Та боже мой.
                                                                                                                                                                      deprecated они и так выучили, раз их проект на 5.6.
                                                                                                                                                                      Будут переходить на 7 — выучат и 7.
                                                                                                                                                                      Обратная совместимость PHP — еще один его плюс. А не как в уже упоминаемом питоне, фактически имеем 2 разных языка. :)

                                                                                                                                                                      ООП?
                                                                                                                                                                      Так в последнее время уже тренд говорить, что ООП — говно.
                                                                                                                                                                      То наследование не стоит использовать. А без наследования и другие киты, на которых стоит ООП, имеют мало смысла.

                                                                                                                                                                      Очень маловероятно, что легко найдешь работу на современном рынке

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

                                                                                                                                                                      Если человек писал качественный код в процедурном стиле, то он будет его писать и в другом стиле. :)

                                                                                                                                                                      Ну вот что дает Вам использование ООП? :)
                                                                                                                                                                        +2
                                                                                                                                                                        Абстракции и инкапсуляцию, как минимум.
                                                                                                                                                                          0
                                                                                                                                                                          Этому сложно научится тому, кто не работал с ООП? :)
                                                                                                                                                                          Можно перед собеседованием прочитать? :)
                                                                                                                                                                            +1
                                                                                                                                                                            Прочитать можно. Но я за 5 минут выясню только прочитал человек или способен мыслить в объектно-ориентированной парадигме. Банальная задачка: накидать описания классов для прямоугольника, квадрата и ромба для моделирования школьных задач по геометрии.
                                                                                                                                                                            Вторая: накидать описания классов для моделирования процесса кормления человеком собаки.

                                                                                                                                                                            Бумажка, ручка, любой псевдокод, любые вопросы.
                                                                                                                                                                              0
                                                                                                                                                                              прямоугольника, квадрата и ромба

                                                                                                                                                                              Вы хотите, чтобы квадрат наследовал и прямоугольника, и ромба? :)

                                                                                                                                                                              У вас на проекте используется множественное наследование? :)

                                                                                                                                                                              Кмк, человек, который ранее с ООП не работал, но имеет мозги, пройдет Ваш тест.

                                                                                                                                                                              Вторая задача — вообще какой-то бред. :)
                                                                                                                                                                          0
                                                                                                                                                                          дело в том, что есть по сути два современных подхода: ооп и фп, у каждого есть плюсы и минусы. В старом пхп не было ни того, ни другого, только процедурки.
                                                                                                                                                                          В новом есть нормальное ООП и какие-то зачатки ФП (лямбды и т.д)
                                                                                                                                                                          Так что выбора особого не вижу тут.
                                                                                                                                                                            0
                                                                                                                                                                            Вы о каком выборе говорите вообще?

                                                                                                                                                                            На вопросы опять нету ответа. :)
                                                                                                                                                                              0
                                                                                                                                                                              Зачатки ФП были и в PHP3.
                                                                                                                                                  +3
                                                                                                                                                  На мой взгляд, чего реально в PHP не хватает, так это легкого встроенного шаблонизатора с нормальным экранированием вывода. В результате приходится либо подключать сторонний (что оправдано для больших проектов, но очень сильно «утяжеляет» маленькие), либо городить вечные <?php echo htmlspecialchars();?>
                                                                                                                                                    0
                                                                                                                                                    А вы это как себе на практике представляете? Внезапно все echo будут по некой магической директиве принудительно прогонятся через htmlspecialchars, типа такая же веселая штука будет, как незабвенные magic quotes?
                                                                                                                                                      0
                                                                                                                                                      на практике это реализуется шаблонизацией) Какой-нибудь встроенный класс-парсер шаблонов с подставлением переменных.
                                                                                                                                                      Ну просто чтобы не тащить целый twig в домашнюю страничку.
                                                                                                                                                        0
                                                                                                                                                        Ну класс парсер пишется за 5 минут и вообщем-то для такой хотелки как выше займет строк 10, толку его в ядро языка тащить?
                                                                                                                                                        +1
                                                                                                                                                        Нет, ну есть синтаксис <?=, могли бы добавить какой-нибудь условный <?#= для искейпа
                                                                                                                                                          +2
                                                                                                                                                          В чем проблема для вас определить функцию и делать <?= p()?>? Забыть не сложнее чем <?#=, лишние пара символов играют роль разве? При этом экранирование оно как бы разное бывает, не везде хватит htmlspecialchars, а кое-где его будет много. Собтсвенно c помощью PHP не только html генерят.
                                                                                                                                                          +1
                                                                                                                                                          Не нужно даже ничего изобретать на тему экранирования — «все уже украдено до нас» ((с) «Операция Ы»), называется XHP:

                                                                                                                                                          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, а также банкльное колесо).
                                                                                                                                                            +1
                                                                                                                                                            Мне кажется, он слишком тяжелый, чтобы просто использовать его для экранирования данных. Ну и синтаксис одного языка внутри другого языка выглядит как-то не очень красиво.
                                                                                                                                                              +1
                                                                                                                                                              Но мысли там интересные и правильные.

                                                                                                                                                              Вообщем-то если подумать, например, когда мы генерим json,
                                                                                                                                                              то написание что-то вроде
                                                                                                                                                              echo('{var:"'.$var.'"}')
                                                                                                                                                              

                                                                                                                                                              или
                                                                                                                                                              {var:"<?=$var?>"}
                                                                                                                                                              

                                                                                                                                                              выглядит довольно странно и обычно так все-таки не делают.

                                                                                                                                                              Опять же при генерации XML, обычно стараются делать это на основе каких-то структур.

                                                                                                                                                              Однако в Html для браузера мы привыкли делать как-то так:

                                                                                                                                                              <input type="text" value="<?=$var?>">
                                                                                                                                                              


                                                                                                                                                              Собственно все проблемы типа безопасности, необходимости экранирования и тд, как мне кажется, они именно из-за этого подхода. Т.е., по-моему, суть в том, что такой подход не органичен.