Error en PHP 7

La clase Error es la clase base para los errores internos de PHP en PHP 7. Casi todos los errores fatales y recuperables en PHP 5.x ahora arrojan instancias del objeto Error, haciéndose atrapables a través de los bloques try … catch.
La clase Error implementa la interfaz Throwable, según la siguiente sinopsis de la clase:

Error implements Throwable {
/* Properties / protected string $message ; protected int $code ; protected string $file ; protected int $line ; / Methods */
public __construct (
[ string $message = ""
[, int $code = 0
[, Throwable $previous = NULL ]]]
)
final public string getMessage (void)
final public Throwable getPrevious (void)
final public mixed getCode (void)
final public string getFile (void)
final public int getLine (void)
final public array getTrace (void)
final public string getTraceAsString (void)
public string __toString (void)
final private void __clone (void)
}

El siguiente ejemplo demuestra el uso de la instancia de Error en el bloque catch:

<?php
class User
{
function hello($name)
{
return 'Hello ' . $name;
}
}
// Case 1 - working
try {
$user = new User();
$user->greeting('John');
}
catch (Error $e) {
echo 'Caught: ' . $e->getMessage();
}
// Case 2 - working
try {
$user = new User();
$user->greeting('John');
}
catch (Throwable $t) {
echo 'Caught: ' . $t->getMessage();
}

Sin embargo, todavía hay casos en los que algunos errores no son detectables:

<?php
ini_set('memory_limit', '1M');
try {
$content = '';
while (true) {
$content .= 'content';
}
}
catch (\Error $e) {
echo 'Caught ' . $e->getMessage();
}

El ejemplo anterior desencadena el error grave de PHP: tamaño de memoria permitido de 2097152 bytes agotados … error.

Además, incluso las advertencias pasan, como se muestra en el siguiente ejemplo:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('memory_limit', '1M');
try {
str_pad('', PHP_INT_MAX);
}
catch (Throwable $t) {
echo 'Caught ' . $t->getMessage();
}

El ejemplo anterior activa la advertencia de PHP: str_pad (): la longitud del relleno es demasiado larga … error.
Dice que debemos tener cuidado con nuestras expectativas para detectar errores del lenguaje central, ya que algunos podrían pasar por alto. Los que quedan atrapados son generalmente de la clase de error base. Sin embargo, algunos errores arrojarán una subclase de error más específica:
ArithmeticError, DivisionByZeroError, AssertionError, ParseError, y TypeError.

Comparte