Новые функции в PHP 5.6

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

Типы MIME веб-сервера CLI

MIME types в PHP может быть использован для вывода контента не только text/html. При запуске PHP страницы, по умолчанию вывод осуществляется как text/html, но вы можете использовать установки заголовков, например, PDF и создавать файлы PDF.

Сервер знает о разных типах MIME, потому что большинство серверов, такие как HHVM, Apache и Nginx как правило по умолчанию знают, что делать с файлом по его расширению, без необходимости устанавливать конкретные инструкции в самом PHP.

В командной строке сервера с PHP 5.4 было всего несколько MIME types, в версии PHP 5.6 будет в десятки раз больше. Можно с уверенностью сказать, что все распространенные типы MIME будут встроены в сервер с PHP 5.6.

к меню ↑

Внутренняя перегрузка операторов

Эту функцию веб-разработчики PHP, скорее всего не будут менять, из-за слова internal что означает non userland, где userland применяется только для внутренних классов, для того, чтобы сделать код разработки в этой области проще и читаемым.

к меню ↑

Загрузка файлов более 2 Gb

До версии PHP 5.6, загрузка файлов была до 2 ГБ, теперь будет больше. Но не так, как свойство changelog, и загрузка файлов произвольного размера теперь поддерживается.

к меню ↑

Уменьшено потребление памяти

Использование памяти POST данных в PHP 5.6 уменьшилось в 2-3 раза и удалены переменные: always_populate_raw_post_data установлены в php.ini и суперглобальная переменная $HTTP_RAW_POST_DATA. Это означает, что вы можете потерять доступ к данным raw post, но есть решение:

$postdata = file_get_contents("php://input");

Обратите внимание, что сообщение не доступно через ://input, если форма будет multipart (другими словами, форма загрузки файла элемента).

к меню ↑

Улучшенный синтаксис для функций variadic

Функция Variadic — может принимать произвольное количество аргументов. Когда вы определили некоторые аргументы, как правило, их нужно объединить после вызова функции func_get_args, которая была немного непрактична. Пример, который был раньше, взят из Синтаксис в 5.5:

class MySQL implements DB {
  protected $pdo;
  public function query($query) {
    $stmt = $this->pdo->prepare($query);
    $stmt->execute(array_slice(func_get_args(), 1));
    return $stmt;
  }
  // …
}
$userData = $db->query('SELECT * FROM users WHERE id = ?', $userID)->fetch();

теперь, синтаксис будет:

class MySQL implements DB {
  public function query($query, …$params) {
    $stmt = $this->pdo->prepare($query);
    $stmt->execute($params);
    return $stmt;
  }
  // …
}

Синтаксис ...$params указывает функции принимать в качестве первого параметра, а всё остальное в массив $params. Это освобождает нас от объединения и вызов func_get_params, улучшает функцию подписи, и делает код более читабельным.

Новый синтаксис также позволяет передавать дополнительные аргументы ссылке, с помощью префикса ...$params, например, так: &...$params. Раньше с функцией func_get_args сделать это, было невозможно.

к меню ↑

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

Добавлена возможность выражения RFC, в местах которые ожидают только статические значения. Это означает, что теперь у Вас есть базовые арифметические и логические структуры в объявлении константа, аргументов функций, свойств класса и др.

Например, раньше, такой код выдавал ошибку:

const a = 1;
const b = a?2:100;

Можно спорить, является ли постоянное действительно постоянным, если оно зависит от значения другой константы, но такие мета-дискуссии лучше оставить на другой раз.

к меню ↑

PHPDBG по умолчанию в комплекте

Отладчик phpdbg, теперь по умолчанию в комплекте, как SAPI. Он используется из командной строки, или с упрощенного Java UI, указания точек останова в интерактивном режиме, изменять во время выполнения программы и многое другое. Он также может проверять операции, и используются в вашем коде PHP. Узнайте больше о phpdbg здесь.

к меню ↑

Улучшения Zip

Библиотека Zip получила ряд улучшений, в частности, в виде новых методов. Один из них, который выделяется особенно ::setPassword($password) который наконец-то позволяет с легкостью создавать защищенные паролем Zip — файлы.

к меню ↑

Импорт пространств имен функции

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

namespace foo\bar {
  function baz() {
    return 'foo.bar.baz';
  }
}
namespace {
  use foo\bar as b;
  var_dump(b\baz());
}

Начиная с PHP 5.6, мы сможем использовать метод const для импорта одной функции или константы (даже класса констант).

namespace {
  use function foo\bar as foo_bar;
  use const foo\BAZ as FOO_BAZ;
  var_dump(foo_bar());
  var_dump(FOO_BAZ);
}
к меню ↑

Заключение

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

Если Я пропустил что-то важное, или неправильно истолковал, пожалуйста, дайте мне знать в комментариях ниже.