- PVSM.RU - https://www.pvsm.ru -

Так как PHP — развивающийся язык, то я расскажу об уже реализованных возможностях в третьем бета релизе версии 5.6. По сути, эта публикация — дополнение к предыдущей: "Функции в PHP 5.6 — что нового? [1]".
Возвращает массив, в котом содержится любая информация добавленная разработчиком. Вызывается в том случае, когда объект передается в качестве аргумента, например, в функцию var_dump().
Пример:
namespace Application;
class Test
{
public $prop = 200;
public function __debugInfo()
{
return [1];
}
}
var_dump(new Test);
Результат выполнения:
object(ApplicationTest)#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"
}
Импорт функций и констант (из пространств имен) — это как импорт классов — круто. На первый взгляд. Когда доходит до дела, то работает оно, по крайней мере сейчас, плохо.
Пример:
namespace Application
{
const TEST = 2 * 4;
function test()
{
return TEST;
}
}
namespace
{
use const ApplicationTEST;
use function Applicationtest;
var_dump(test(), TEST);
}
Результат выполнения:
int(8)
int(8)
Вроде бы и неплохо, но нет автозагрузки — она реализованна только для классов. Так что данное «улучшение», сейчас, только добавляет необходимость использовать дополнительный синтаксис. Отныне, если указано пространство имен, то к функции невозможно обратиться даже выполнив include (или require) файла в котором она содержится и придется еще дописать use function NameSpacethe_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 [2]
Автор: BR0kEN
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/67668
Ссылки в тексте:
[1] Функции в PHP 5.6 — что нового?: http://habrahabr.ru/post/198980/
[2] wiki.php.net/rfc#php_56: https://wiki.php.net/rfc#php_56
[3] Источник: http://habrahabr.ru/post/233571/
Нажмите здесь для печати.