![](http://habrastorage.org/files/725/ea0/5fb/725ea05fb24d44dd854d5fe77109a247.jpg)
Так как 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
ссылка на оригинал статьи http://habrahabr.ru/post/233571/
Добавить комментарий