
Acceso seguro a arrays: los nuevos getters de arrays tipificadas de Laravel
- Publicado el 29 mayo, 2025
- Palabras: 113
Los arrays son fundamentales para el desarrollo en PHP, pero pueden ser una fuente de errores sutiles cuando se espera un tipo y se obtiene otro. ¿Cuántas veces has escrito código como if (!empty($data['settings']) && is_array($data['settings'])) para asegurarte de que tus datos sean del tipo correcto antes de usarlos? Los nuevos helpers de obtención de tipos de Laravel para la clase Arr eliminan este código repetitivo y hacen que tu código sea más conciso y robusto.

#Comprensión de los getters tipados
La clase Arr de Laravel se ha mejorado con métodos getters tipados que intentan recuperar un valor de un array y verificar que coincida con el tipo esperado. Si el valor no coincide, se lanza una excepción de tipo InvalidArgumentException, lo que protege contra formatos de datos inesperados.
Los métodos getters tipados disponibles incluyen:
use IlluminateSupportArr;
// Basic array example
$array = [
'name' => 'Joe',
'active' => true,
'score' => 85.5,
'visits' => 42,
'languages' => ['PHP', 'Ruby']
];
// Type-specific retrievals
$languages = Arr::array($array, 'languages'); // ['PHP', 'Ruby']
$isActive = Arr::boolean($array, 'active'); // true
$score = Arr::float($array, 'score'); // 85.5
$visits = Arr::integer($array, 'visits'); // 42
$name = Arr::string($array, 'name'); // 'Joe'
Cuando los tipos no coinciden, los métodos generan excepciones útiles:
// Esto lanzará un InvalidArgumentException
$value = Arr::array($array, 'name'); // 'name' es un string, no un array
#Ejemplo práctico
Veamos cómo los getters tipificados mejoran un escenario típico de procesamiento de configuración:
use Illuminate\Support\Arr;
class PaymentGateway
{
protected array $config;
public function __construct(array $config)
{
$this->config = $config;
}
public function processPayment(float $amount): bool
{
// Before: verbose type checking
if (!isset($this->config['api_key']) || !is_string($this->config['api_key'])) {
throw new Exception('API key is required and must be a string');
}
if (isset($this->config['debug']) && !is_bool($this->config['debug'])) {
throw new Exception('Debug flag must be a boolean value');
}
if (isset($this->config['allowed_currencies']) && !is_array($this->config['allowed_currencies'])) {
throw new Exception('Allowed currencies must be an array');
}
// Process payment...
// After: concise, expressive type checking
try {
$apiKey = Arr::string($this->config, 'api_key');
$debug = Arr::boolean($this->config, 'debug', false); // With default
$allowedCurrencies = Arr::array($this->config, 'allowed_currencies', []); // With default
// Process payment...
} catch (InvalidArgumentException $e) {
throw new Exception('Invalid payment configuration: ' . $e->getMessage());
}
}
}
Observe cómo los getters tipados reducen el texto repetitivo y, al mismo tiempo, aclaran la intención. El código ahora se centra en lo que necesitamos, en lugar de en una validación tediosa.

Desarrollador backend especializado en PHP y Laravel, con sede en Santander, Cantabria. Más de 15 años de experiencia en el desarrollo de aplicaciones web a medida y en la modernización de código heredado.
Fuente: Harris Raftopoulos
Artículos relacionados
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión