Нововведения в 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

ссылка на оригинал статьи http://habrahabr.ru/post/233571/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *