- Генераторы (generators) - простой способ краткого описания итераторов с помощью ф-ции, внутри которой указано ключевое слово
yield
, автоматически становится генератором (код benchmark'а, пример генератора). Конструкция yield
, возвращает итерируемые элементы. Соль в том, что при использовании итератора, нет необходимости полностью генерировать массив значений - итератор будет возвращать следующее значение по мере необходимости, что позволяет работать с бесконечными потоками данных. Все это также можно сделать с помощью класса имплементирующего интерфейс Iterator
.
Генераторы дают простоту, и вам не нужно вручную имплементировать пять разных методов на каждый итератор - функция-генератор делает это за вас. По сути, ф-ция генератор возвращает объект Generator
, который уже реализует интерфейс Iterator
. Результат ф-ции генератора также содержит методы rewind
, current
, next
- используя поочередно методы next и cerrent - вы также сможете получить все его значения. - Подпрограммы (coroutine) - хорошо описаны здесь;
- Type Hinting все еще не работает со скалярами: Catchable fatal error: Argument 1 passed to foo() must be an instance of int, integer given;
Zend OPcache - система кеширования и оптимизации байт-кода;
- Новое API хеширования паролей:
password_hash
, password_verify
:
$php_hash = password_hash($password, PASSWORD_DEFAULT);
password_verify($password, $php_hash) ? true : false;
- Строковые литералы и массивы (Const array/string dereference) - теперь можно обращаться к элементам массива или символам строк "на лету" по ключам:
echo ['one', 'two'][mt_rand(0, 1)]; // one OR two
echo 'sTring'[1]; // T
echo 'строка'[1]; // � с юникодом, конечно же, все плохо
empty(), isset()
умеют проверять результат ф-ции:
if ( ! empty(getSomeItems() ) {
// ...
}
- Модификатор
e
для ф-ции preg_replace
получил статус deprecated
. При ошибке: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in file.php on line xxx перепишите ф-цию preg_replace
на preg_replace_callback
. - Ф-ции
mysql_*
будут генерировать E_DEPRECATED.
Используйте MySQLi
или PDO_MySQL. Добавлены функции mysqli_begin_transaction(), mysqli::begin_transaction()
;
- Ф-ция
boolval()
: var_dump(boolval('')); // bool(false)
- Можно получить полное имя класса с
namespace
:
<?php
namespace App\Library;
class File
{
public function __construct()
{
echo "Class name with namespace: " . self::class . ' == ' . get_class($this);
}
}
new File(); // Class name with namespace: App\Library\File == App\Library\File
try/catch/finally
(подробнее, еще) - блок finally
выполняется всегда (даже когда исключение не было брошено) по завершении блока try/catch
.list
работает внутри foreach
:
$tags = array(
array(1, 'php', 'PHP'),
array(2, 'js', 'JavaScript'),
);
foreach ($tags as list($id, $key, $tag)) {
echo "$id : $key : $tag<br>";
}
- Новая ф-ция
array_column
для получения столбца с заданным ключем из вложенных массивов:
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe'
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith'
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names); // Array ( [0] => John [1] => Sally )
- Добавили поддержку атрибута
Max-Age
в setcookie()
;