as
La parola chiave "as" in PHP viene usata nei cicli foreach, nelle istruzioni use per alias e nella risoluzione dei conflitti tra trait.
La parola chiave as in PHP
as è una parola chiave PHP piccola ma versatile. Non è una funzione e non compare mai da sola — funziona sempre come un collegamento che assegna un nome temporaneo a qualcosa. La incontrerai in quattro contesti distinti:
- In un ciclo
foreach, per associare ogni elemento (e opzionalmente la sua chiave) a una variabile. - In un'istruzione
use, per assegnare un alias più breve a un namespace, una classe o una funzione importata. - In un blocco
usedi un trait, per creare un alias o modificare la visibilità di un metodo durante la risoluzione dei conflitti. - In
list()/ destrutturazione di array all'interno di unforeach(foreach ($rows as [$a, $b])).
Questa guida copre ogni utilizzo con esempi eseguibili, oltre ai problemi comuni da evitare.
as in un ciclo foreach
Questo è l'utilizzo che vedrai più spesso. All'interno di foreach, as associa l'elemento corrente a una variabile per il corpo del ciclo. Esistono due forme:
<?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 variabile dopo as viene riassegnata ad ogni iterazione; non deve esistere in precedenza.
Iterare valori e coppie chiave/valore
<?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: 30Poiché anche gli oggetti PHP sono iterabili, la stessa forma chiave => valore percorre le proprietà pubbliche di un oggetto:
<?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: 30Modificare gli elementi con as &$value
Inserisci un & prima della variabile del ciclo per associarla per riferimento, in modo che le modifiche si propaghino nell'array originale:
<?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 )Attenzione: dopo un ciclo
foreach (... as &$value),$valuefa ancora riferimento all'ultimo elemento. Esegui sempreunset($value)dopo il ciclo, altrimenti un'assegnazione successiva a$valuesovrascriverà silenziosamente quell'ultimo elemento dell'array.
Destrutturazione con as [...]
Da PHP 7.1 è possibile destrutturare ogni riga direttamente nella clausola as, il che è perfetto per array di coppie o righe:
<?php
$pairs = [[1, "one"], [2, "two"]];
foreach ($pairs as [$num, $word]) {
echo "$num => $word\n";
}
// 1 => one
// 2 => twoLa sintassi più vecchia con list() — foreach ($pairs as list($num, $word)) — fa la stessa cosa. Consulta list() per i dettagli.
as per alias di namespace e importazioni
In un'istruzione use, as rinomina un simbolo importato. Questo evita nomi completamente qualificati e lunghi e risolve i conflitti quando due importazioni condividono un nome breve:
<?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();Gli alias funzionano allo stesso modo per funzioni e costanti importate (use function ... as, use const ... as). Consulta i namespace PHP per il quadro completo.
as per la risoluzione dei conflitti tra trait
Quando una classe usa due trait che definiscono un metodo con lo stesso nome, as consente di creare un alias per uno di essi in modo che entrambi rimangano accessibili:
<?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"; // notifyQui as non itera nulla — rinomina semplicemente un metodo. as può anche cambiare la visibilità di un metodo, ad esempio report as protected reportInternal;.
Quando usare quale forma
| Contesto | Cosa fa as | Esempio |
|---|---|---|
foreach | associa ogni elemento a una variabile | foreach ($items as $item) |
use | crea un alias per un simbolo importato | use Long\Name as Short; |
blocco use di trait | crea un alias / modifica la visibilità di un metodo | Notifier::report as notify; |
| destrutturazione | spacchetta ogni riga | foreach ($rows as [$a, $b]) |
Errori comuni
- Usare
asal di fuori dei contesti sopra indicati.asnon è un operatore generale —$x = $y as $z;è un errore di sintassi. - Dimenticare
unset()dopo un ciclo per riferimento (vedi l'avvertenza sopra). - Aspettarsi di vedere le proprietà private quando si itera un oggetto. Vengono esposte solo le proprietà visibili nell'ambito corrente.
Riepilogo
La parola chiave as associa sempre un nome: un elemento del ciclo in foreach, un alias in un'importazione use o in un blocco trait, oppure un valore destrutturato. Conoscere tutti e quattro gli utilizzi ti permette di leggere e scrivere PHP idiomatico senza sorprese. Per approfondire, esplora i cicli PHP, foreach, i namespace e i trait.