Что нового в PHP 5.5

Совсем недавно вышел PHP 5.5, в котором появились новые интересные функции. В этой статье мы рассмотрим некоторые из них и обсудим какие преимущества они дают разработчикам.

Generators PHP 5.5

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

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

Рассмотрим пример функции range() , которая возвращает массив значений аргументов между $start и $end .

Использование функции range():


<?php
foreach (range(0, 1000000) as $number) {
    echo $number;
}


В этом примере есть проблема; массив возвращаемых range() который будет занимать много памяти, больше чем 100 Мб. Этот код — демонстрация, но есть много ситуаций, где создаются большие массивы данных, и они занимают много времени и памяти.

С введением генераторов в PHP 5.5, можно легко решить эту проблему. Рассмотрим модификацию кода, используя генератор, производящий диапазон значений:



<?php
// define a simple range generator
function generateRange($start, $end, $step = 1) {
    for ($i = $start; $i < $end; $i += $step) {
        // yield one result at a time
        yield $i;
    }
}

foreach (generateRange(0, 1000000) as $number) {
    echo $number;
}


Этот код выполняет то же самое что и в первом примере, но не создаёт большого массива для хранения всех значений. Это уменьшает объем памяти меньше одного килобайта — огромная экономия по сравнению с первым примером кода.

Хэширование Паролей

Хэширование паролей API является одним из самых важных и полезных функций добавленных в PHP 5.5. Раньше разработчики вынуждены были полагаться на функцию crypt() , которая плохо документирована в PHP manual. С введением упрощенного набора функций для обработки хеширования пароля, стало намного понятней как хэшировать пароли для своих сайтов.

В новом API есть две новые функций password_hash() и password_verify() . Вызов password_hash($password, PASSWORD_DEFAULT) возвращает сильную путаницу, используя bcrypt с солью автоматически.

API использует bcrypt по умолчанию, но в будущем могут быть введены новые алгоритмы, для более безопасного метода хеширования. Разработчики могут указать свои собственные bcrypt , регулировать силу хэширования, и может также использовать свои собственные соли, вместо автоматической (хотя руководство препятствует этому).

PHP 5.5 finally

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

Без ключевого слова finally , разработчики иногда были вынуждены повторять код в try  и  catch очистки дескриптора задачи. Например, в следующем примере вызов releaseResource() должен быть сделан в двух местах:



<?php
function doSomething() {
    $resource = createResource();
    try {
        $result = useResource($resource);
    }
    catch (Exception $e) {
        releaseResource($resource);
        log($e->getMessage());
        throw $e;
    }
    releaseResource($resource);
    return $result;
}


С добавлением finally , мы можем исключить дублирование кода:



<?php
function doSomething() {
    $resource = createResource();
    try {
        $result = useResource($resource);
        return $result;
    }
    catch (Exception $e) {
        log($e->getMessage());
        throw $e;
    }
    finally {
        releaseResource($resource);
    }
}


В модифицированной версии, мы вызываем функцию очистки releaseResource() в блок finally , который будет вызываться всегда. Хотя блок try и возвращает значение, блок finally по-прежнему будет выполняется перед оператором return и выполнение программы будет продолжается.

Массивы и снятие строковых литералов

Массив и строковые литералы могут теперь быть сняты к доступу с массива, используя синтаксис:



<?php
// array dereferencing - returns 3
echo [1, 3, 5, 7][1];

// string dereferencing - returns "l"
echo "hello"[3];


Эта функция была добавлена в первую очередь для повышения понимания языка, и скорее всего это не улучшит то как мы пишем PHP. Но, есть некоторые интересные приложения:



<?php
$randomChar = "abcdefg0123456789"[mt_rand(0, 16)];


Функций и Выражения с помощью empty()

empty() — теперь можно использовать с помощью вызовов функций и других выражений. Например: empty($object->getProperty()) это корректный код в PHP 5.5. Это делает возможным использование empty() на возвращаемое значение функции без записи значения в переменной.

Разрешить имена классов

С момента введения пространства имен в PHP 5.3, стало обычным делом широко использовать пространство имен, организовывать классы в PHP проектах например: Парсинг XML С SimpleXML

Однако, до сих пор трудно получить полное имя класса в виде строки. Рассмотрим следующий код:



use Namespaced\Class\Foo;
$reflection = new ReflectionClass("Foo");


Это невозможно, так как PHP попытается использовать глобальный класс Foo вместо имен класса. В PHP 5.5, теперь можно получить полное имя класса в виде строки с помощью ключевого слова class :



<?php
use NamespacedClassFoo;

$reflection = new ReflectionClass("Foo");


Теперь код будет работать как нужно, а Foo:class разрешен в Namespaced\\Class\\Foo.

Изменения foreach

list() в PHP 5.5, разрешает значение массива, чтобы легко назначить переменные. Например:



$values = ["sea", "blue"];

list($object, $description) = $values;

// returns "The sea is blue"
echo "The $object is $description";


Теперь можно использовать list() с многомерными массивами в пределах петли foreach . Например:



<?php
$data = [
    ["sea", "blue"],
    ["grass", "green"]
];

foreach ($data as list($object, $description)) {
    echo "The $object is $descriptionn";
}

/* Outputs:
The sea is blue
The grass is green
*/


Это новое мощное средство, которое имеет потенциал, чтобы сделать итерации через вложенные массивы гораздо проще и чище.

Петли foreach могут также обработать не скалярных значения как итератор ключей, что означает, что элемент ключей может иметь значение, которые не являются строкой или целым числом.

В заключение

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

3 комментария на тему “Что нового в PHP 5.5”

  1. комментарии

    Здравствуйте, Виктор! Пришёл к вам на сайт из Яндекса по запросу «как пользоваться php5 если есть код», но ответа ни у вас, ни у других не нашёл. Не могли бы вы хотя бы задать направление поиска — вот есть код для PHP5, который вроде как делает нужные мне вещи (конкретно, парсинг урлов записей из RSS лент). Куда его вставить? Как получить файл с искомыми данными? Помогите, пожалуйста!

  2. комментарии

    Привет Василий,
    Попробуйте повторить запрос в Яндексе, набрав в адресной строке Парсинг URL

  3. комментарии

    ок. спасибо, буду разбираться

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

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

Можно использовать следующие HTML -теги и атрибуты: <a href= http://pixelcom.crimea.ua/"" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>