PHP 7, вы уже сделали решительный шаг?

  • Автор темы mega182
  • 27
  • Обновлено
  • 17, May 2024
  • #1
Я разместил это на других форумах, но я собираюсь разместить это и здесь, так как мне просто очень интересно услышать, что думают другие и каков ваш опыт работы с этим на данный момент.

Мне просто любопытно - обновив свой сервер до PHP 7.1 - сколько других людей погрузились в его развертывание в реальных условиях.



Учитывая, что по состоянию на 31 декабря 2016 года ВСЯ разработка ветки 5.x официально завершилась, за исключением исправлений ошибок безопасности, и ей грозит конец жизни (то есть никаких обновлений безопасности) почти ровно через два года, это кажется безрассудным и совершенно глупым НЕ делать этого.



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

Похоже, что некоторые люди хотят, чтобы веб-программы написали один раз и забыли, но, честно говоря, это никогда не было справедливо ни для одного программного обеспечения.

Это кажется смехотворно ошибочным предположением, и именно поэтому ТАК много компаний, похоже, зацикливаются на таких вещах, как «мы уже знали это, почему вы все еще это делаете! Нам в течение ДЕСЯТИЛЕТИЯ говорили прекратить это делать». !"

Таким образом, мой собственный переход был относительно безобидным, поскольку если в 5.6 он работает без предупреждений, то и в 7 он запустится без ошибок.

Я все еще оцениваю свои кодовые базы, чтобы увидеть, какие/где изменения и улучшения можно/нужно использовать, просто чтобы еще больше сэкономить на моем хостинге. Для меня настроить его и запустить было несложно, поскольку, опять же, на помощь пришел HowToForge.

Я использую Debian 8.4 с ISPconfig 3, поэтому после «обновления apt-get; обновления apt-get» все прошло довольно чисто, несмотря на то, что мне пришлось собирать его из исходных кодов, поскольку Debian еще не создал для него официальный пакет.



и У меня есть недоверие к «пользовательским репозиториям». Единственная проблема заключается в том, что ISPConfig не любит выбирать PHP-FPM, выдавая 500 ошибок (кажется, Apache все еще ищет FPM PHP 5), но fastCGI все равно вызывает PHP-FPM, так как это то, что есть, поэтому я действительно не понимаю, в чем этот выбор ISPConfig делает.



Было намного проще в домене на том же сервере, который я настроил непосредственно в файлах Apache .conf. Также интересны мнения об изменениях и улучшениях языка - и я говорю о более тонких вещах, а не об очевидных: «Ну, пора уже избавиться от ерунды mysql_!». Хотя, опять же, было бы ЗАМЕЧАТЕЛЬНО, если бы они взяли на вооружение тренировочные колеса mysqli, чтобы слабоумные дураки, которые не могут смириться с тем, что «методология mysql_ плоха», перестали сходить с ума, используя ту же самую тупую чушь под mysqli. Изменения, которые мне нравятся, довольно просты. Определение массива немного запоздало.

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

Возможность сделать их массивами? Прекрасный. Объединение значений Null — это здорово: больше не нужно возиться с isset, если вы просто хотите иметь альтернативное значение, когда оно не так.

Ты только
 
$test = [

[ '007', 'Jimbo' ],

[ '711', 'Apu' ]
];
foreach ($test as [ $id, $name ]) {
Код (разметка): и бум, готово.

Точно так же оператор космического корабля — еще одно удобное сокращение для общей операции.

заменяющее троичную операцию:
  $gtl= $a <=> b; 
Код (разметка): с гораздо более простым...
  $gtl = $a < $b ? -1 : ($a > b ? 1 : 0); 
Код (разметка): Красиво.... Включение возвращаемых значений приведения типов является отличным примером чего-то запоздалого: как и в случае с изменениями в ECMAScript 6, эту быструю и свободную игру с мусором приведения типов необходимо ОСТАНОВИТЬ.

Это одна из основных причин ошибок И возможных дыр в безопасности, и это то, с чем «настоящий» язык программирования, такой как C, никогда не столкнется.

Поскольку в версии 7.0 нам предоставили типизацию, также приятно, что в версии 7.1 появилась возможность использования void, чтобы память не тратилась зря на выделение пространства или случайную попытку вернуть значения из функций, которые не возвращают значения.

(что отличает Modula и Pascal, называя их процедурами, а не функциями) Мне также нравится, что объявления типов функций выполнены в стиле Вирта; приведение типа результата ПОСЛЕ имени функции и параметров.

хотя и добавили указанную функциональность в язык, если не считать замены «функции», куда еще они собирались ее поместить? Обобщающий «итерируемый» тип является своего рода обязательным, я думаю, теперь, когда у нас есть приведение типов, так что хорошо, что в 7.1 его добавили.

Если элемент является arrayTraversable - НЕЗАВИСИМО от того, является ли это фактическим массивом, вы можете использовать для него это приведение типов к параметрам и результатам.

ЧУВСТВУЕТ, что в этом нет необходимости, но, учитывая кошмар попытки добавить НАДЛЕЖАЩЕЕ приведение типов к языку, который более десяти лет существовал без концепции, это имеет смысл.



Я до сих пор не уверен, что это приложение для анонимных классов, но похоже, что фанаты изменчивости JavaScript пытаются перетащить свой мусор в PHP, потому что им не нравится, насколько близко к тому, как НАСТОЯЩИЕ ООП-языки делают вещи так же, как «расширяет» . Мне придется сесть и написать что-нибудь, чтобы действительно использовать это, чтобы посмотреть, смогу ли я вообще найти для этого причину.



Точно так же я не уверен, что понимаю, для чего вообще предназначено замыкание::call, но это похоже на то, что я, как человек, изучавший объекты в Smalltalk, Modula и Object Pascal, НИКОГДА не стал бы делать.

. Но мне не нравится «определение» закрытия, современное программирование, кажется, пришло из 1960-х годов и плохо переведено с финского на японский, а затем на английский, так что...

Запись строки кода Unicode? Опять же, почему этого вообще не было в языке?!? Я не заинтересован в функциональности initlChar, так как не уверен, зачем вам ее использовать (а тем более тратить на нее библиотечное пространство).

Доход от генераторов тоже хорошая идея; готово, СКАЖИТЕ, готово.



к сожалению, как бы мне ни нравились генераторы, когда они были представлены в версии 5.5, и они кажутся хорошей идеей, я еще не встречал реального сценария, где эта функциональность ДЕЙСТВИТЕЛЬНО кажется полезной; даже если внутри таких вещей, как операции выборки SQL, они представляют собой репликацию 1: 1 того, как они работают.



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

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

Я разыгрываю карту «подождем и посмотрим», чем это обернется. Десериализовать? Обычно я не манипулирую данными таким образом, поэтому не уверен, что когда-нибудь буду им пользоваться... Кроме того, я не в восторге от пространств имен, поэтому не уверен, что меня волнуют их изменения в нем.

Для меня это то, что если у вас есть объекты И область действия функции, зачем вам это нужно?!? тем более, что, поскольку они могут изолировать область действия, но на самом деле не ОГРАНИЧИВАЮТ ее, какой в этом смысл? Помимо того, что это набор костылей для людей, пришедших с Java, поскольку Oracle продолжает свою тенденцию «давайте уничтожим ВСЕ, что мы купили у Sun»… Как поклонник языка вирт и ассемблера, мне очень нравится intDiv, но, черт возьми, мне бы хотелось, чтобы это был ОПЕРАТОР, а не функция.

Я имею в виду:

$а = intdiv(5, 2); // $a теперь равно 2

это «мило» и все такое, но было бы так сложно скопировать из языков семейства Вирт, используя СЛОВО в качестве операции? Я имею в виду, что в Паскале или Модуле то же самое:

а := 5 дел 2; { а теперь 2 }

Так что мне нравится эта идея, она ОЧЕНЬ запоздала, когда дело доходит до избавления от бесконечного бессмысленного тупого «пола» в стиле C каждый раз, когда вы что-то делаете.

но реализацию можно было бы немного почистить.

Это должна быть конструкция оператора/языка, а НЕ функция! ПРОСТО как/или %.



Переопределение массивов в session_start интересно, но я не совсем понимаю, ПОЧЕМУ вы это делаете - но возможно, что, поскольку я использую конструкцию «один индекс, чтобы управлять ими всеми», каждая страница и доступ пользователей на моем сайте маршрутизируются всего лишь через ОДИН index.php.



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

preg_replace_callback_array — мощный инструмент, который может привести к более чистому коду, но он кажется достаточно сложным, и я вижу, как многие люди злятся по этому поводу.

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



Исправление list() для ArrayAccess было еще одним исправлением, но PHP 7.1 делает кое-что НАМНОГО более интересное с list(), оно добавляет возможность доступа к индексам, поэтому вы можете назначать ассоциативные массивы непосредственно переменным - что означает, что вы можете игнорировать некоторые, в частности, обращаются к другим индексам напрямую, вместо того, чтобы создавать переменную для КАЖДОЙ записи в массиве, который вы назначаете list().

Хотя в этот момент я начинаю задаваться вопросом, не является ли оператор типаbindParam, основанный на индексах, плохой идеей.

но новая деструктуризация массива в PHP 7.1 в этом отношении довольно крутая.

 $name = $_POST['username'] ?? 'guest';
Код (разметка): О да, меня это не устраивает. В PHP7 также появилась кое-что, с чем, как я видел, у некоторых людей возникали проблемы.

отрицательные смещения строк.

Раньше, если вы передавали отрицательное смещение строки, оно рассматривалось как ноль.

СЕЙЧАС? ЕСЛИ вы сказали $a[-2], вы получите второй символ с КОНЦА строки.

УДОБНО — чертовски лучше, чем играть с substrr, — но может вызвать проблемы с миграцией.

В версии 7.1 поддержка push-уведомлений CURL HTTP/2 действительно открывает двери для множества вещей, которые в конечном итоге вам придется либо перебирать с помощью сокетов самостоятельно, либо искать что-то вроде C для обработки.

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

может остаться незамеченным в течение нескольких лет, пока кто-то дает ему запоминающееся имя, например AJAX.



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



и общественность. В версии 7.1 также добавлена возможность перехватывать несколько типов исключений.

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

Единственное, что меня немного смущает, — это удаление опции «salt» из пароля_hash.

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

В целом я не в восторге от пароля_hash, я все еще использую hash(), поскольку он предлагает поддержку SHA512 и Whirlpool.

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

В любом случае, это мои взгляды на это.

мнения? Что вы, ребята, думаете об этом? Уже сделали решительный шаг? Как это прошло для вас? Есть ли проблемы с его установкой, которыми вы хотели бы поделиться?

Это важная тема, и чем раньше мы начнем говорить о «смерти 5.x», тем лучше, тем более, что 5.6 теперь официально находится в коме и находится на жизнеобеспечении, что касается группы PHP.

mega182


Рег
02 Jan, 2014

Тем
1

Постов
3

Баллов
13
  • 31, May 2024
  • #2
Запуск 7.0.x на всех моих серверах, еще не обновился до 7.1 (надеюсь на простое обновление репозитория, чтобы избежать необходимости собирать его самостоятельно), прошел без проблем, но у меня нигде нет устаревшего кода, так что не большой сюрприз.

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

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

Михаил Копылов


Рег
02 May, 2013

Тем
0

Постов
3

Баллов
3
  • 10, Jun 2024
  • #3
Я перешел на использование PDO пару лет назад, некоторые программы с открытым исходным кодом (они знают, кто они) до сих пор поддерживают старое расширение mysql_*!!!!! Я использую подготовленные операторы всякий раз, когда отправляю какие-либо данные в базу данных, чтобы, если я изменю источник данных на что-то, предоставленное пользователем, я случайно не открою дыру в безопасности. Теперь я стараюсь приводить данные повсюду: для новых вещей, которые делаю, для старых фрагментов кода, которые мне нужно пройти, и добавить приведение типов. Подождите немного, когда хосты начнут обновлять все свои серверы до PHP 7 на любом форуме веб-разработки, вы начнете видеть много тем «мой сайт внезапно перестал работать».
 

vborg


Рег
18 Jun, 2012

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно