php 5.6 что нового — 10 новых возможностей

Ранее:

php 5.5 10 новых возможностей

10 новых возможностей php 5.6

1. Скалярные выражения в константах.

class Test
{
	const DAY = 60 * 60 * 24;

	const LIST_OF_CARS = array(
		'honda',
		'bmw',
		'mercedes',
	);
}

Арифметические операции и массивы теперь доступны в константах.

2. Переменное число аргументов у функции. Возможность не задавать все аргументы явно, можно передавать неограниченное количество аргументов с помощью оператора "...". Пример:

function summary($a1, $a2 = 2, ...$other)
{
	echo $a1 . PHP_EOL;
	echo $a2 . PHP_EOL;
	print_r($other);
}

summary(1, 2, 'value1', 'value2' , 'valueN');
/** Результат:
1
2
Array
(
    [0] => value1
    [1] => value2
    [2] => valueN
)*/

Как видно из примера, все переданные параметры попадают в массив. В более ранних версиях была возможность передавать переменное количество аргументов с помощью func_get_args, но теперь в php 5.6 можно без этого костыля.

А также доступна распаковка аргументов с помощью "...":

// PHP 5.6+
function add($a1, $a2, $a3)
{
    return $a1 + $a2 + $a3;
}

$operators = [2, 3];
echo add(1, ...$operators);

//Результат: 6

3. Не перезаписываются значения в массивах, если массив объявлен как property класса и имеет не статические ключи. Ранее значения переписывались в соответствии с индексами массива. Рассмотрим на примере:

class Test {
	const ZERO = 0;

	public $testArray = [
		self::ZERO => 'first',
		'second',
		'third',
	];
}
// результат в версиях до php 5.6:
array(2) {
  [0]=>
  string(6) "second"
  [1]=>
  string(5) "third"
}
// php 5.6+:
array(3) {
  [0]=>
  string(5) "first"
  [1]=>
  string(6) "second"
  [2]=>
  string(5) "third"
}

4. Новый оператор возведения в степень **. Уже имелась функция pow(). Оператор ** добавлен для удобства. Примеры:

$i = 2 ** 3; //8
$i **= 2;  //64

5. default для необязательных аргументов. Можно опускать значения для необязательных аргументов, передавая вместо аргумента ключевое слово default.

function fooBar($i, $description = NULL, $force = true, $ignore = true) {}
fooBar(10, default, default, false);

6. Исключения вместо фатальных ошибок. Пример:

$object = NULL;
$object->callMethod();

До php 5.6 этот код падал с фаталом:

Fatal error: Call to a member function callMethod() on a non-object

В php 5.6+ вылетит EngineException с сообщением 'Call to a member function on a non-object'.

7. Иморт функций из namespace. Поддерживается импортирование функций и констант из пространства имён. Имеется возможность задавать алиас (псевдоним) на имя функции.

PHP 5.6+
// импорт функции
use function foo\bar\functionName;
functionName();

// импорт и создание алиаса (псевдонима) функции
use function foo\bar\functionName as myFunc;
myFunc();

8. Кодировка для функций htmlentities(), html_entity_decode() и htmlspecialchars() по умолчанию выставляется равной кодировке, которая задана через default_charset.

9. phpdbg — интерактивный php-дебаггер, реализован как SAPI модуль.

10. GMP перегрузка операторов. GMP объекты теперь поддерживают перегрузку операторов. Я никогда не пользовался GMP. Если можете понятно объяснить зачем они и зачем в них перегрузка операторов - давайте в комментарии.

И другие новые фичи php 5.6+:

  • добавлена функция __debugInfo. Позволяет изменять свойства объекта перед тем как объект будет выведен на экран с помощью var_dump. Встраивать функцию нужно прямо в класс.
  • улучшения SSL/TLS
  • pgsql теперь может выполнять асинхронные соединения и запросы.
 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ