as
La palabra clave "as" en PHP se usa en foreach, alias de namespaces, traits y desestructuración de arrays. Aprende sus cuatro usos con ejemplos.
La palabra clave as en PHP
as es una palabra clave de PHP pequeña pero versátil. No es una función y nunca aparece sola — siempre actúa como enlazador que asigna un nombre temporal a algo. La encontrarás en cuatro contextos distintos:
- En un bucle
foreach, para enlazar cada elemento (y opcionalmente su clave) a una variable. - En una sentencia
use, para dar a un namespace, clase o función importada un alias más corto. - En un bloque
usede trait, para crear un alias o cambiar el ámbito de un método durante la resolución de conflictos. - En
list()/ desestructuración de arrays dentro de unforeach(foreach ($rows as [$a, $b])).
Esta guía cubre cada uso con ejemplos ejecutables, además de los errores comunes.
as en un bucle foreach
Este es el uso que verás con más frecuencia. Dentro de foreach, as enlaza el elemento actual a una variable para el cuerpo del bucle. Existen dos formas:
<?php
// Value only
foreach ($array as $value) {
// $value is the current element
}
// Key and value
foreach ($array as $key => $value) {
// $key is the current key, $value is the current element
}La variable después de as se reasigna en cada iteración; no necesita existir de antemano.
Iterar valores y pares clave/valor
<?php
// Indexed array — value only
$names = ["John", "Doe"];
foreach ($names as $name) {
echo $name . "\n";
}
// John
// Doe
// Associative array — key => value
$person = ["name" => "John", "age" => 30];
foreach ($person as $property => $value) {
echo "$property: $value\n";
}
// name: John
// age: 30Dado que los objetos de PHP también son iterables, la misma forma key => value recorre las propiedades públicas de un objeto:
<?php
class Person {
public $name = "John";
public $age = 30;
private $secret = "hidden"; // not visible from outside
}
foreach (new Person() as $property => $value) {
echo "$property: $value\n";
}
// name: John
// age: 30Modificar elementos con as &$value
Coloca un & antes de la variable del bucle para enlazarla por referencia, de modo que los cambios se propaguen de vuelta al array original:
<?php
$nums = [1, 2, 3];
foreach ($nums as &$n) {
$n *= 2;
}
unset($n); // important — see gotcha below
print_r($nums);
// Array ( [0] => 2 [1] => 4 [2] => 6 )Atención: después de un bucle
foreach (... as &$value),$valuesigue referenciando el último elemento. Siempre ejecutaunset($value)después, o una asignación posterior a$valuesobrescribirá silenciosamente ese último elemento del array.
Desestructuración con as [...]
Desde PHP 7.1 puedes desestructurar cada fila directamente en la cláusula as, lo cual es perfecto para arrays de pares o filas:
<?php
$pairs = [[1, "one"], [2, "two"]];
foreach ($pairs as [$num, $word]) {
echo "$num => $word\n";
}
// 1 => one
// 2 => twoLa sintaxis antigua con list() — foreach ($pairs as list($num, $word)) — hace lo mismo. Consulta list() para más detalles.
as para alias de namespaces e importaciones
En una sentencia use, as renombra un símbolo importado. Esto evita nombres completamente calificados largos y resuelve conflictos cuando dos importaciones comparten el mismo nombre corto:
<?php
use App\Models\User as UserModel;
use Acme\Auth\User as AuthUser;
// Both "User" classes are now usable without collision:
$a = new UserModel();
$b = new AuthUser();Los alias funcionan igual para funciones y constantes importadas (use function ... as, use const ... as). Consulta los namespaces de PHP para una visión completa.
as para resolución de conflictos en traits
Cuando una clase usa dos traits que definen un método con el mismo nombre, as permite crear un alias para uno de ellos de modo que ambos sigan siendo accesibles:
<?php
trait Logger { public function report() { return "log"; } }
trait Notifier { public function report() { return "notify"; } }
class Service {
use Logger, Notifier {
Logger::report insteadof Notifier; // pick Logger's report()
Notifier::report as notify; // keep Notifier's under a new name
}
}
$s = new Service();
echo $s->report() . "\n"; // log
echo $s->notify() . "\n"; // notifyAquí as no itera nada — simplemente renombra un método. as también puede cambiar la visibilidad de un método, por ejemplo report as protected reportInternal;.
Cuándo usar cada forma
| Contexto | Qué hace as | Ejemplo |
|---|---|---|
foreach | enlaza cada elemento a una variable | foreach ($items as $item) |
use | crea un alias de un símbolo importado | use Long\Name as Short; |
bloque use de trait | crea un alias / cambia el ámbito de un método | Notifier::report as notify; |
| desestructuración | desempaqueta cada fila | foreach ($rows as [$a, $b]) |
Errores comunes
- Usar
asfuera de los contextos anteriores.asno es un operador general —$x = $y as $z;es un error de sintaxis. - Olvidar
unset()después de un bucle por referencia (ver la advertencia anterior). - Esperar propiedades privadas al iterar un objeto. Solo se exponen las propiedades visibles en el ámbito actual.
Resumen
La palabra clave as siempre enlaza un nombre: un elemento del bucle en foreach, un alias en una importación use o en un bloque de trait, o un valor desestructurado. Conocer los cuatro usos te permitirá leer y escribir PHP idiomático sin sorpresas. Para profundizar, explora los bucles de PHP, foreach, los namespaces y los traits.