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).
Sfida
FacileOrganizziamo 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 classeCarnel namespaceVehiclecon una proprietàpublic $brand. Il costruttore deve accettare il nome del marchio e assegnarlo. Aggiungi un metododescribe()che restituisca"Vehicle: [brand]".Animal/Car.php: definisci una classeCarnel namespaceAnimal(questa è una gatta di nome Car!). Deve avere una proprietàpublic $age. Il costruttore accetta l'età e la assegna. Aggiungi un metododescribe()che restituisca"Cat named Car, age: [age]".main.php: includi entrambi i file delle classi usandorequire_once. Crea un oggetto da ciascun namespace usando i rispettivi percorsi completi dei namespace, quindi stampa il risultato della chiamata adescribe()su ciascun oggetto (ognuno su una riga separata).
In main.php, crea:
- Una
Vehicle\Carcon il marchio"Toyota" - Una
Animal\Carcon 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)
?>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
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave $thisMetodiProprietàCostruttore (__construct)Distruttore (__destruct)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa parola chiave parent::Sovrascrittura dei metodiLa parola chiave finalClassi astratteRiepilogo - Gerarchia dei dipendenti7Incapsulamento
Pubblico, Protetto, PrivatoApprofondimento sui modificatori di accessoGetter e SetterOccultamento delle informazioniPromozione dei parametri del costruttore (8.0)Riepilogo - Sistema di gestione dei registri degli studenti10Concetti avanzati di programmazione a oggetti
Composizione vs ereditarietàDependency InjectionClassi anonimeEnumerazioni (PHP 8.1)Fibers (PHP 8.1)Approfondimento sulla clonazione degli oggettiGeneratori e iteratori13Modelli di progettazione, parte 2
Modello CommandModello AdapterModello DecoratorModello Template MethodModello StateModello CompositeModello Repository2Namespace e autoloading
Introduzione ai namespaceLa keyword useStandard di autoloading PSR-4Autoloader di ComposerRiepilogo - Progetto organizzato5Interfacce e contratti
Introduzione alle interfacceImplementare le interfacceImplementare più interfacceInterfaccia vs classe astrattaType hinting con le interfacceRiepilogo - Calcolatore di forme8Metodi magici
Introduzione ai metodi magici__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e clonazione degli oggetti__serialize e __unserializeRiepilogo - Collezione personalizzata11Sistema dei tipi e gestione degli errori
Dichiarazioni di tipoTipi nullableTipi unione e intersezioneClassi di eccezioneGerarchia di eccezioni personalizzataTry, Catch, FinallyRiepilogo - Validatore di moduli14Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Proprietà delle classi
Proprietà di istanza e staticheCostanti nelle classiMetodi e proprietà staticiProprietà private e protectedProprietà readonly (PHP 8.1)Riepilogo - Gestore di conti bancari6Polimorfismo
Ridefinizione dei metodi, ripresaPolimorfismo tramite interfacceSuggerimenti sui tipi e tipi UnionBinding statico tardivoRiepilogo - Processore di pagamenti9Tratti
Introduzione ai trattiUtilizzare più trattiRisoluzione dei conflitti tra trattiMetodi astratti nei trattiTratti vs ereditarietà12Design pattern - Parte 1
Introduzione ai design patternPattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore PHP online