W3docs

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:

  1. In un ciclo foreach, per associare ogni elemento (e opzionalmente la sua chiave) a una variabile.
  2. In un'istruzione use, per assegnare un alias più breve a un namespace, una classe o una funzione importata.
  3. In un blocco use di un trait, per creare un alias o modificare la visibilità di un metodo durante la risoluzione dei conflitti.
  4. In list() / destrutturazione di array all'interno di un foreach (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: 30

Poiché 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: 30

Modificare 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), $value fa ancora riferimento all'ultimo elemento. Esegui sempre unset($value) dopo il ciclo, altrimenti un'assegnazione successiva a $value sovrascriverà 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 => two

La 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"; // notify

Qui 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

ContestoCosa fa asEsempio
foreachassocia ogni elemento a una variabileforeach ($items as $item)
usecrea un alias per un simbolo importatouse Long\Name as Short;
blocco use di traitcrea un alias / modifica la visibilità di un metodoNotifier::report as notify;
destrutturazionespacchetta ogni rigaforeach ($rows as [$a, $b])

Errori comuni

  • Usare as al di fuori dei contesti sopra indicati. as non è 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.

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.

Esercitazione

Pratica
Cosa fa la parola chiave 'as' in PHP?
Cosa fa la parola chiave 'as' in PHP?
Was this page helpful?