Menu
Coddy logo textTech

Introduzione ai namespace

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 10 di 91.

Man mano che i tuoi progetti PHP crescono, creerai molte classi. Cosa succede quando due classi hanno lo stesso nome?

Per esempio, potresti avere una classe User per il tuo blog e un'altra classe User per il tuo negozio. Gli spazi dei nomi risolvono questo problema organizzando le classi in gruppi logici.

Un namespace è come una cartella per le tue classi. Lo dichiari all'inizio del tuo file PHP usando la parola chiave namespace:

<?php
namespace Blog;

class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

Ora puoi avere un'altra classe User in uno spazio dei nomi diverso:

<?php
namespace Shop;

class User {
    public $email;
    
    public function __construct($email) {
        $this->email = $email;
    }
}

Per usare una classe con namespace, fai riferimento a essa usando il suo percorso completo con una barra rovesciata:

<?php
$blogUser = new \Blog\User("Alice");
$shopUser = new \Shop\User("alice@example.com");

echo $blogUser->name . "\n";
echo $shopUser->email . "\n";

Output:

Alice
alice@example.com

La barra rovesciata \ separa i livelli dello spazio dei nomi, analogamente a come le barre separano le cartelle in un percorso di file. Puoi anche creare spazi dei nomi annidati come App\Models\Blog per un’organizzazione più approfondita.

Punto chiave: Gli spazi dei nomi prevengono i conflitti tra nomi e mantengono il codice organizzato. Dichiara sempre lo spazio dei nomi prima di qualsiasi altro codice nel tuo file (ad eccezione delle istruzioni declare).

challenge icon

Sfida

Facile

Organizziamo una piccola applicazione usando i namespace per evitare conflitti tra classi con lo stesso nome.

Immagina di creare un sistema che gestisce sia veicoli sia animali. Entrambi gli ambiti hanno un'entità chiamata Car: una rappresenta un'automobile vera e propria, mentre l'altra è una gatta domestica di nome "Car" (sì, alcune persone chiamano così i loro gatti!).

Creerai tre file:

  • Vehicle/Car.php: definisci una classe Car nel namespace Vehicle con una proprietà public $brand. Il costruttore deve accettare il nome del marchio e assegnarlo. Aggiungi un metodo describe() che restituisca "Vehicle: [brand]".
  • Animal/Car.php: definisci una classe Car nel namespace Animal (questa è una gatta di nome Car!). Deve avere una proprietà public $age. Il costruttore accetta l'età e la assegna. Aggiungi un metodo describe() che restituisca "Cat named Car, age: [age]".
  • main.php: includi entrambi i file delle classi usando require_once. Crea un oggetto da ciascun namespace usando i rispettivi percorsi completi dei namespace, quindi stampa il risultato della chiamata a describe() su ciascun oggetto (ognuno su una riga separata).

In main.php, crea:

  • Una Vehicle\Car con il marchio "Toyota"
  • Una Animal\Car con età 3

Ricorda di usare la barra rovesciata \ per fare riferimento alle classi con namespace usando il loro percorso completo quando crei gli oggetti.

Provalo tu

<?php
// Includi i file delle classi
require_once 'Vehicle/Car.php';
require_once 'Animal/Car.php';

// TODO: Crea un oggetto Vehicle\Car con marca "Toyota"
// Ricorda di usare il percorso completo del namespace con la barra rovesciata

// TODO: Crea un oggetto Animal\Car con età 3
// Ricorda di usare il percorso completo del namespace con la barra rovesciata

// TODO: Stampa il risultato di describe() per ogni oggetto (ciascuno su una riga separata)

?>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online