Всем привет! В этом материале рассмотрим, как изменились сообщения об ошибках в PHP 7.1 .

Что нового в PHP7.1: новые сообщения об ошибках.

Всем привет! В этом материале рассмотрим, как изменились сообщения об ошибках в PHP 7.1.

Как известно, если мы что-то делаем не так в языке программирования PHP, то получим ошибку. Например, если мы не передали в функцию требуемый аргумент, то у нас будет Fatal Error. Однако эти ошибки недостаточно информативны и их сложно воспринимать. Поэтому в PHP 7.1 они были изменены и улучшены. Как говорится, они стали более User Friendly.

Давайте рассмотрим обозначенный выше пример:

class User {
  public function avatar($size) {
   return 'avatar.jpg?s='.$size;
  }
}

$user = new User;
echo $user->avatar();

Как и говорилось выше, в наш метод avatar требуется передать размер изображения, но мы этого не делаем. В PHP 7.0 мы получим следующее сообщение:

Warning: Missing argument 1 for User::avatar(), called in ...

Полностью приводить сообщение я не стал, т.к. в этом нет особого смысла. Все, что нас интересует, это то, что у нас пропущен 1 аргумент для метода avatar() в классе User.

Если мы этот же код запустим в PHP 7.1, то получим более понятное и информативное сообщение об ошибке:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function User::avatar(), 0 passed in ... and exactly 1 expected in ...

Как вы можете видеть, здесь написано, что передано слишком мало аргументов в метод avatar() класса User, 0 прошло на такой-то строчке(где надо было передать аргументы) и точно 1 ожидался на такой-то строчке(где написан сам метод).

Что интересно, если мы добавим еще один параметр и установим для него значение по умолчанию

class User {
  public function avatar($size, $default = 'default') {
   return 'avatar.jpg?s='.$size;
  }
}

$user = new User;
echo $user->avatar();

то сообщение изменится. Оно будет выглядеть так:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function User::avatar(), 0 passed in ... and at least 1 expected in ...

Здесь написано то же самое, что и раньше, но слово exactly заменено на at least, т.е. теперь сообщение говорит нам о том, что не точно один аргумент ожидается, а хотя бы один. Это произошло из-за того, что у нас для второго параметра установлено значение по умолчанию, следовательно, мы можем его не передавать, и тогда будет использоваться именно оно.

Помимо того, что сообщения теперь стали более понятными и информативными, они еще и выглядеть стали красивее!

А на этом сегодня все. Спасибо за внимание!