- 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
- Operador de Fusión Null (??)
Permite verificar valores null de forma concisa:
$website = $input ?? 'No disponible';
Equivalente a:
$website = isset($input) ? $input : 'No disponible';
- 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
- 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
- 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");
- 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
- 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
- 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
- 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};
- 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();
}
- Función intdiv()
División entera segura:
<?php
echo intdiv(10, 3); // Salida: 3
- Opciones de Configuración para Sesiones
Configuración avanzada en session_start():
session_start([
'read_and_close' => true,
'cookie_lifetime' => 3600
]);
- 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