Skip to content

Instantly share code, notes, and snippets.

@RusAlex
Created August 12, 2016 16:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RusAlex/9d33b36578b7dd5cc8fc9031cf596274 to your computer and use it in GitHub Desktop.
Save RusAlex/9d33b36578b7dd5cc8fc9031cf596274 to your computer and use it in GitHub Desktop.

Что нового в PHP 7.1 ?

https://wiki.php.net/rfc/nullable_types

Самое необходимое. Как только мы в комании начали использовать PHP 7.x, return type declaration стал строгим правилом. На примере какого-нибудь геттера модели можно встретиться что если свойство равно NULL то и return type declaration строгое правило сработает и вызовет ошибку.

function getRelatedModel(): \Domain\Entity
{
  return new \Domain\Entity;  // OK
}

function getRelatedModel(): \Domain\Entity
{
  return null; // NOT OK
}

function getRelatedModel(): ?\Domain\Entity
{
  return null; // OK
}

В параметрах функций

function foo(?\Domain\Entity $entity) {}

foo(new \Domain\Entity); // valid
foo(null); // valid
foo(); // INVALID !

https://wiki.php.net/rfc/void_return_type

Здесь опять, если хотим использовать плюшки из static type checking ? Надо продолжать движение в этом направлении. Если знаем что функция ничего не должна возвращать —  описываем это явно.

function i_do_not_return_anything() : void {
  // some action

  return;
}

https://wiki.php.net/rfc/list_keys

https://wiki.php.net/rfc/multiple-catch

Кто активно использует исключения, уже встречался что обработчики могут быть очень похожи. А то и идентичны. Что приводит к дублированию кода. Теперь можно будет использовать следующий синтаксис:

// Раньше
try {
  // something
} catch (\LogicException $e) {
  // LogicException handler
} catch (\DomainException $e) {
  // DomainExceptionHandler 
}

// PHP 7.1
try {
  // something
} catch (\LogicException || \DomainException $e) {
  // common
}

PHP развивается и развивается очень быстро что не может не радовать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment