Свежая подборка со ссылками на новости и материалы. В выпуске: релиз PHP 8.0.1, MySQL движок на PHP от Vimeo и другие релизы, обновленный Enum и свежие предложения для PHP 8.1, «уязвимость» в Laminas, инструменты, статьи, видео, PHP Дайджест Live в 20:00 МСК.
Приятного чтения!
value()
теперь просто свойство. Обзор предложения был в выпуске № 194 и на стриме.В обсуждении указали на то, что библиотека молодая и не доступна во многих инсталяциях. Поэтому пока лучше предоставлять ее в виде PECL расширения, а забандлить позже.
variadic_function(...['apple', 'banana', 'lemon']);
А в PHP 7.4 то же самое в массивах:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
Но оба случая не поддерживали массивы со строковыми ключами. И поскольку с добавлением именованных аргументов в PHP 8.0 уже решен первый случай, то теперь нет причин сохранять ограничение для второго.
В PHP 8.1 предлагается разрешить распаковку массивов со строковыми ключами:
$array1 = ['a' => 'apple', 'p' => 'pear'];
$array2 = ['b' => 'banana', 'o' => 'orange'];
$array = [...$array1, ...$array2];
// Приблизительно то же самое что:
$array = array_merge($array1, $array2);
htmlspecialchars()
почти всегда используется с флагами ENT_QUOTES
и ENT_SUBSTITUTE
:
• ENT_QUOTES — WordPress
• ENT_QUOTES — Blade (Laravel)
• ENT_QUOTES | ENT_SUBSTITUTE — Twig (Symfony or Slim)
• ENT_QUOTES | ENT_SUBSTITUTE — CodeIgniter
• ENT_QUOTES | ENT_SUBSTITUTE — CakePHP
• ENT_QUOTES | ENT_SUBSTITUTE — Yii
Предлагается сделать эти флаги включенными по умолчанию.
$GLOBALS
начиная с PHP 8.1
$GLOBALS['x'] = 1;
echo $GLOBALS['x']
isset($GLOBALS['x']);
unset($GLOBALS['x']);
А вот попытка изменить саму переменную $GLOBALS
вызовет ошибку:
$GLOBALS = [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
Также ошибка будет, если передать $GLOBALS
по ссылке в функцию:
asort($GLOBALS);
// > Compile-time error
Все это упрощает внутренности PHP и улучшает производительность операций с массивами в PHP.
true
, если передать в нее массив с последовательными целочисленными ключами 0, 1, 2 ... count($value)-1
. Функция переименована из is_list()
в array_is_list()
. О причинах было подробнее на стриме.
В Symfony уже успели сделать полифил для PHP 8.1 с этой функцией.
ray($anything)
в своем коде, и при запуске PHP-скрипта оно красиво отображается в отдельном десктопном приложении.
Если вы осилили Xdebug, то вряд ли это имеет смысл. А если отлаживаете в стиле var_dump(...)/die()
, то может быть интересно.
Смотрите подробный
class MyClassWithToString {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __toString() {
return (string) $this->name;
}
}
$input = unserialize('O:19:"MyClassWithToString":1:{s:4:"name";s:15:"/tmp/etc/passwd";}');
if ($input instanceof MyClassWithToString) {
unlink($input);
}
Во фреймворк запушили исправление с проверкой на is_string()
перед тем как делать unlink()
. Но если посмотреть внимательнее, то уязвимость касается десериализации данных от пользователя. А на php.net красным написано, что не стоит использовать unserializie()
в подобных случаях.
Более того, с 2017 года ошибки десериализации больше не считаются ошибками безопасности, просто потому что unserialize()
никогда не будет безопасным (не только в PHP).
Вот еще свежий пост об эксплуатации подобных багов на примере Yii.
Сегодня будет третий стрим по мотивам PHP Дайджеста. Разбор новостей и ссылок из выпуска с подробностями и деталями, обзор присланного, интересное но не вошедшее в выпуск, результаты розыгрыша и новый конкурс со слониками.
Начало в 20:00 Москва, Минск / 19:00 Киев.
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP Дайджест № 195
Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…
Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…
Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…
У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…
24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…
27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…