Нововведения в PHP 5.6 beta 3
Так как PHP — развивающийся язык, то я расскажу об уже реализованных возможностях в третьем бета релизе версии 5.6. По сути, эта публикация — дополнение к предыдущей: «Функции в PHP 5.6 — что нового?».
Магический метод __debugInfo ().Возвращает массив, в котом содержится любая информация добавленная разработчиком. Вызывается в том случае, когда объект передается в качестве аргумента, например, в функцию var_dump ().Пример:
namespace Application;
class Test { public $prop = 200;
public function __debugInfo () { return [1]; } }
var_dump (new Test); Результат выполнения: object (Application\Test)#2 (1) { [0]=> int (1) } Примечание: Если в возвращаемый массив поместить переменную $this, то вы войдете в бесконечный цикл. :)
Экспоненциальный оператор **. Здесь, уверен, все понятно и без описания. Простой оператор в виде двух астерисков экспоненциально умножающий числа.Пример:
$exponent = 2 ** 4; var_dump ($exponent); // int (16) $exponent **= 2; var_dump ($exponent); // int (256)
unset ($exponent);
$exponent = ~2; var_dump ($exponent); // int (-3) $exponent **= 2; var_dump ($exponent); // int (9) Примечание: Также это работает и с GMP.
Пример:
$base = gmp_init (2); var_dump ($base ** 3); Результат выполнения: object (GMP)#3 (1) { [«num»]=> string (1) »8» } Языковые конструкции use function и use const. Импорт функций и констант (из пространств имен) — это как импорт классов — круто. На первый взгляд. Когда доходит до дела, то работает оно, по крайней мере сейчас, плохо.Пример:
namespace Application { const TEST = 2×4; function test () { return TEST; } }
namespace { use const Application\TEST; use function Application\test;
var_dump (test (), TEST); } Результат выполнения: int (8) int (8) Вроде бы и неплохо, но нет автозагрузки — она реализованна только для классов. Так что данное «улучшение», сейчас, только добавляет необходимость использовать дополнительный синтаксис. Отныне, если указано пространство имен, то к функции невозможно обратиться даже выполнив include (или require) файла в котором она содержится и придется еще дописать use function Name\Space\the_func. А если функций много…? Улучшенная автозагрузка классов. Это, правда, было исправлено еще в версии 5.5, но упомянуть стоит.Пример:
spl_autoload_extensions ('.php'); spl_autoload_register (); Ранее, вышеприведенный код работал бы только на компьютере под управлением ОС семейства Windows. Но почему? Все просто. Разделитель вложенности у пространств имен — это символ »\», а в win-системах это еще и разделитель директорий и он отличается от оного в unix системах. По этому-то ранее приходилось делать что-то подобное: spl_autoload_register (function ($class_path) { require_once str_replace ('\\', '/', $class_path) . '.php'; }); Указана кодировка по умолчанию. Отныне, input_encoding, output_encoding и internal_encoding, по умолчанию имеют значение «UTF-8».Обо всех реализованных возможностях можно прочесть перейдя по ссылке: wiki.php.net/rfc#php_56