PHP 5.6 обзор, что нового

PHP 5.6: Обзор

Потребовалось много времени, но мы наконец-то получили новую версию PHP. В ней представлены некоторые новые интересные функции и улучшения, в то время как другие функции были удалены или помечены как устаревшие.

Давайте заглянем внутрь и посмотрим на то, что предлагает последняя версия.

Изменения, несовместимые с предыдущими версиями

В этой части я приведу список изменений, несовместимых с прошлыми версиями. Однако стоит отметить, что большая часть кода PHP5 будет работать в версии PHP 5.6 без каких-либо модификаций.

json_decode

Согласно спецификации JSON, json_decode() сразу устранит все не-строчные варианты JSON литералов, такие как true, false и null. Соответственно будет установлен json_last_error().

GMP ресурсы

Если вы не знаете, что такое GNU Multiple Precision (GMP) в PHP, тогда я бы посоветовал, вам познакомится с этой статьей на сайте PHP.net. В версии PHP 5.6 GMP ресурсы являются объектами. Вам не потребуется изменять что-то в уже существующем коде, кроме случая, когда вы явно проверяете ресурс с помощью метода is_resource().

Mcrypt

Все функции библиотеки Mcrypt, которые используют ключи и векторы инициализации (IV) не принимают ключи или IV не корректного размера. К таким функциям относятся mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic(), и mcrypt_ofb().

Элементы массива и переопределение

До версии PHP 5.6, когда мы объявляли массив в качестве свойства класса с явными и неявными ключами, значение массива переопределялось по умолчанию, когда явный ключ был такой же, как последовательный неявный ключ: 

class helloWorld {

        const ONE = 1;

        public $array = [

            self::ONE => 'Eclipse',

            'Sublime',

            'PHPStorm',

        ];

    }

     $hello = new helloWorld();

     print_r($hello);

     // до версии PHP 5.6

    array('Sublime', 'PHPStorm')

     // версия PHP 5.6

    array('Eclipse', 'Sublime', 'PHPStorm')

Новые возможности PHP 5.6

Константные скалярные выражения

С выходом PHP 5.6 стало возможным создавать скалярное выражение, содержащее как числовые константы, так и строковые литералы. В предыдущих версиях PHP скалярные выражения должны были использоваться как статические значения константного аргумента функции или при объявлении свойства класса:

const ONE = 1;

// Использование скалярного выражения в константе 

const TWO = ONE * 2;

 class helloWorld {

// Использование скалярного выражения в свойстве класса

const THREE = TWO + 1;

// Использование скалярного выражения в методах

public hello f($a = ONE + self::THREE) {

return $a;

    }

}

echo (new helloWorld)->hello()."n";

Функции с переменным числом аргументом с использованием оператора «...»

Раньше мы использовали функцию func_get_args(), чтобы получить все аргументы, доступные в вызове функции, но в версии PHP 5.6 это можно легко сделать при помощи оператора «...»:

 

function myTools($name, ...$tools) {

    echo "Name:". $name.'<br />';

    echo "My Tool Count:". count(tools);

}

 myTools('Avinash', 'Eclipse');

// Вывод:

// Name: Avinash

// My Tool Count: 1

myTools('Avinash', 'Eclipse', 'Sublime');

// Вывод:

// Name: Avinash

// My Tool Count: 2

 myTools('Avinash', 'Eclipse', 'Sublime', 'PHPStorm');

//Вывод:

// Name: Avinash

// My Tool Count: 3

Распаковка аргументов

Мы можем использовать оператор «...» для распаковки любого аргумента, который может быть массивом или множеством обходимых (Traversable) объектов:

function myTools($name, $tool1, $tool2, $tool3) {

        echo "Name:". $name.'<br />';

        echo "Tool1:", $tool1.'<br />';

        echo "Tool2:", $tool2.'<br />';

        echo "Tool3:", $tool3;

    }

    $myTools = ['Eclipse', 'Sublime', 'PHPStorm'];

    myTools('Avinash', ...$myTools);

    // Вывод:

    // Name: Avinash

    // Tool1: Eclipse

    // Tool1: Sublime

    // Tool1: PHPStorm

Сокращенная форма оператора **

Оператор ** был добавлен для операции возведения в степень. Также есть поддержка краткой записи этого оператора:

echo 2 ** 3;

echo "<br/>";

$a=2;

$a **= 3;

echo $a;

 // Вывод:

// 8

// 8

Обратите внимание, что порядок операций сильно зависит от оператора. Давайте рассмотрим следующий пример для более ясного понимания:

echo 2 ** 2 ** 4;

Вы, возможно, ожидаете, что это выражение возвращает 256, как если бы группировка имела вид (2 ** 2) ** 4, но в этом случае это не так. На самом деле, результат будет равен 65 536, так как выполнение происходит справа налево, и выражение может быть представлено как 2 ** (2 ** 4).

phpdbg

В PHP 5.6 был добавлен интерактивный отладчик, названный phpdbg. Для более подробной информации обратитесь к официальному документу по phpdbg.

Данный phpdbg отладчик разработан в виде SAPI модуля.

__debugInfo()

Также в PHP 5.6 был добавлен волшебный метод, позволяющий изменять свойства и значение объекта при выводе объекта с помощью var_dump():

 

class demoDebugInfo() {

    private $val;

 

    public function __construct($val) {

        $this->val = $val;

    }

 

    public function __debuginfo() {

        return [

            'iamchanged' => $this->val + 3;

        ];

    }

}

$debugInfo = new demoDebugInfo(50);

// Мы получим измененный массив, возвращаемый волшебным методом __debuginfo.

var_dump($debugInfo);<b>

</b>

Кодировка символов по умолчанию

Набор символов для функций htmlentities(), html_entity_decode() и htmlspecialchars() можно задать с помощью метода default_charset().

Загрузка файлов большого размера

Существует возможность загрузки файлов размером более 2 ГБ.

Поток php://input может быть использован повторно

Поток php://input можно использовать столько раз, сколько вам нужно для чтения данных. Данная функция обеспечивает весомую экономию памяти по сравнению с чтением POST данных.

Операторы use function и use const

Для оператора use было предложено ввести поддержку расширения констант и функций. Это можно сделать при помощи операторов use const и the use function соответственно. Раньше этот оператор ограничивался лишь использованием классов.

Устаревшие функции

Вызов функции из несовместимого контекста

Если вы попытаетесь получить доступ к нестатическому методу статически, или к статическому через контекст объекта, немедленно будет сгенерирована ошибка E_DEPRECATED:

 

class helloWorld() {

    public static hiWorld () {

    }

}

 $hello = new helloWorld();

 $hello->hiWorld();

 //До версии PHP 5.6

E_STRICT error

// Начиная с версии PHP 5.6

E_DEPRECATED error<b>

</b>

$HTTP_RAW_POST_DATA

Переменная $HTTP_RAW_POST_DATA теперь устарела. Вместо этого нужно использовать php://input.

Настройки кодирования

С введением конфигурации default_charset() соответствующая опция считается устаревшей для iconv и mbstring.

Список измененных функций

Список всех измененных функций PHP 5.6 можно найти в последнем руководстве PHP.

Список новых функций

Список всех новых функций PHP 5.6 можно найти вот в этом разделе руководства по PHP.

Заключение

Пока команда PHP разработчиков работает над следующей версией PHP, я могу сказать, что версия PHP 5.6 обладает солидным списком улучшений и дополнительных функций, а также предоставляет одно из самых простых обновлений для предыдущих версий.




Рекомендуем почитать

 

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


Ваше имя:


Комментарий:


Введите: Картинка