Mejoras y Características Nuevas en PHP 7

  1. Declaraciones de Tipos Escalares

PHP 7 introdujo declaraciones de tipos escalares con dos modos de operación:

  • Modo coercitivo (por defecto)
  • Modo estricto

Ejemplo de declaración:

declare(strict_types=1);

Tipos soportados: int, float, bool, string, array, callable, interfaces.

Ejemplo en modo coercitivo:

<?php
function calculateTotal(int ...$numbers): int {
    return array_sum($numbers);
}
echo calculateTotal(2, '3', 4.1); // Salida: 9

Ejemplo en modo estricto:

<?php
declare(strict_types=1);

function validateNumbers(int ...$values): int {
    return array_sum($values);
}
echo validateNumbers(2, '3', 4.1); // Genera TypeError
  1. Operador de Fusión Null (??)

Permite verificar valores null de forma concisa:

$website = $input ?? 'No disponible';

Equivalente a:

$website = isset($input) ? $input : 'No disponible';
  1. Operador de Nave Espacial (<=>)

Compara dos expresiones devolviendo -1, 0 o 1 según el resultado:

$result = $a <=> $b;
  • Devuelve -1 si $a < $b
  • Devuelve 0 si $a == $b
  • Devuelve 1 si $a > $b
  1. Constantes de Tipo Array

PHP 7 permite definir arrays constantes con define():

<?php
define('DOMAINS', [
    'example.com',
    'test.org',
    'demo.net'
]);
echo DOMAINS[1]; // Salida: test.org
  1. Clases Anónimas

Ejemplo de implementación:

<?php
interface LogHandler {
    public function write(string $message);
}

class Service {
    private $logger;
    
    public function setLogger(LogHandler $logger) {
        $this->logger = $logger;
    }
    
    public function logMessage(string $text) {
        $this->logger->write($text);
    }
}

$service = new Service;
$service->setLogger(new class implements LogHandler {
    public function write(string $message) {
        echo "Registro: $message";
    }
});
$service->logMessage("Acceso iniciado");
  1. Método Closure::call()

Ejemplo de uso:

<?php
class Container {
    private $value = 42;
}

$accessor = function() {
    return $this->value;
};

// PHP 7+
echo $accessor->call(new Container); // Salida: 42
  1. Filtro Seguro para unserialize()

Protección contra inyección de datos:

<?php
class SafeData {
    public $content;
}

$serialized = serialize(new SafeData());
$data = unserialize($serialized, ["allowed_classes" => false]);
var_dump($data instanceof __PHP_Incomplete_Class); // true
  1. Generador CSPRNG

Funciones seguras para generación de números:

<?php
echo bin2hex(random_bytes(10)); // Cadena hexadecimal aleatoria
echo PHP_EOL;
echo random_int(1, 100); // Número entre 1 y 100
  1. Sentencia use Mejorada

Importación múltiple desde el mismo namespace:

use App\Utilities\{Helper, Validator, Router};
use function Math\{add, subtract};
use const Config\{MAX_SIZE, TIMEOUT};
  1. Manejo de Errores con Excepciones

Errores fatales convertidos en excepciones:

<?php
try {
    // Código que genera error
} catch (Error $e) {
    echo "Error detectado: " . $e->getMessage();
}
  1. Función intdiv()

División entera segura:

<?php
echo intdiv(10, 3); // Salida: 3
  1. Opciones de Configuración para Sesiones

Configuración avanzada en session_start():

session_start([
    'read_and_close' => true,
    'cookie_lifetime' => 3600
]);
  1. Características Obsoletas

  • Constructores estilo PHP4 (métodos con nombre de clase)
  • Llamadas estáticas a métodos no estáticos
  • Parámetro 'salt' en password_hash()
  • Opción 'capture_session_meta' en SSL

Etiquetas: PHP7 typed-properties null-coalescing spaceship-operator anonymous-classes

Publicado el 10-4 17:12