Esercizi Namespace PHP

Edoardo Midali
Ecco degli esercizi con soluzione per praticare l’uso dei namespace in PHP.
Esercizio 1: Definire un Namespace
Creare un semplice namespace e definire una classe al suo interno.
file: MyNamespace.php
<?php
namespace MyNamespace;
class Saluto {
public function diCiao() {
echo "Ciao dal namespace MyNamespace!";
}
}
?>
file: index.php
<?php
require 'MyNamespace.php';
use MyNamespace\Saluto;
$saluto = new Saluto();
$saluto->diCiao(); // Output: Ciao dal namespace MyNamespace!
?>
Esercizio 2: Namespace Multipli
Creare più namespace in un unico file e definire classi al loro interno.
file: Namespaces.php
<?php
namespace PrimoNamespace {
class PrimaClasse {
public function messaggio() {
echo "Ciao dal PrimoNamespace!";
}
}
}
namespace SecondoNamespace {
class SecondaClasse {
public function messaggio() {
echo "Ciao dal SecondoNamespace!";
}
}
}
?>
file: index.php
<?php
require 'Namespaces.php';
use PrimoNamespace\PrimaClasse;
use SecondoNamespace\SecondaClasse;
$prima = new PrimaClasse();
$prima->messaggio(); // Output: Ciao dal PrimoNamespace!
$seconda = new SecondaClasse();
$seconda->messaggio(); // Output: Ciao dal SecondoNamespace!
?>
Esercizio 3: Utilizzare Funzioni di Namespace
Creare un namespace con una funzione e utilizzarla in un altro file.
file: FunctionsNamespace.php
<?php
namespace FunzioniNamespace;
function saluta() {
return "Ciao dal namespace FunzioniNamespace!";
}
?>
file: index.php
<?php
require 'FunctionsNamespace.php';
use function FunzioniNamespace\saluta;
echo saluta(); // Output: Ciao dal namespace FunzioniNamespace!
?>
Esercizio 4: Alias di Namespace
Utilizzare un alias per un namespace.
file: MyNamespace.php
<?php
namespace MyNamespace;
class Saluto {
public function diCiao() {
echo "Ciao dal namespace MyNamespace!";
}
}
?>
file: index.php
<?php
require 'MyNamespace.php';
use MyNamespace\Saluto as SalutoAlias;
$saluto = new SalutoAlias();
$saluto->diCiao(); // Output: Ciao dal namespace MyNamespace!
?>
Esercizio 5: Namespace e Funzioni Globali
Creare un namespace che contiene una classe con un metodo che chiama una funzione globale.
file: GlobalNamespace.php
<?php
namespace GlobalNamespace;
class UtilizzaGlobale {
public function mostraData() {
echo "La data corrente è: " . date('Y-m-d');
}
}
?>
file: index.php
<?php
require 'GlobalNamespace.php';
use GlobalNamespace\UtilizzaGlobale;
$util = new UtilizzaGlobale();
$util->mostraData(); // Output: La data corrente è: [data corrente]
?>
Esercizio 6: Namespace e Costanti
Definire una costante all'interno di un namespace e utilizzarla in un altro file.
file: ConstantsNamespace.php
<?php
namespace ConstantsNamespace;
const MESSAGGIO = "Ciao dal namespace ConstantsNamespace!";
?>
file: index.php
<?php
require 'ConstantsNamespace.php';
use const ConstantsNamespace\MESSAGGIO;
echo MESSAGGIO; // Output: Ciao dal namespace ConstantsNamespace!
?>
Esercizio 7: Namespace Nidiati
Creare namespace nidiati e utilizzare una classe dal namespace figlio.
file: NestedNamespace.php
<?php
namespace PadreNamespace\FiglioNamespace;
class Saluto {
public function diCiao() {
echo "Ciao dal namespace FiglioNamespace!";
}
}
?>
file: index.php
<?php
require 'NestedNamespace.php';
use PadreNamespace\FiglioNamespace\Saluto;
$saluto = new Saluto();
$saluto->diCiao(); // Output: Ciao dal namespace FiglioNamespace!
?>
Esercizio 8: Namespace e Autoloading
Utilizzare un autoloader per caricare classi da namespace differenti.
file: Saluto.php
<?php
namespace Libreria\Saluto;
class Saluto {
public function diCiao() {
echo "Ciao dal namespace Libreria\Saluto!";
}
}
?>
file: index.php
<?php
spl_autoload_register(function ($class) {
include str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
});
use Libreria\Saluto\Saluto;
$saluto = new Saluto();
$saluto->diCiao(); // Output: Ciao dal namespace Libreria\Saluto!
?>
Esercizio 9: Namespace e Eccezioni Personalizzate
Creare un namespace con una classe che lancia un'eccezione personalizzata e gestirla.
file: ExceptionNamespace.php
<?php
namespace EccezioneNamespace;
class EccezionePersonalizzata extends \Exception {}
class TestEccezione {
public function lanciaEccezione() {
throw new EccezionePersonalizzata("Errore personalizzato!");
}
}
?>
file: index.php
<?php
require 'ExceptionNamespace.php';
use EccezioneNamespace\TestEccezione;
use EccezioneNamespace\EccezionePersonalizzata;
try {
$test = new TestEccezione();
$test->lanciaEccezione();
} catch (EccezionePersonalizzata $e) {
echo $e->getMessage(); // Output: Errore personalizzato!
}
?>
Esercizio 10: Namespace e Interfacce
Creare un namespace con un'interfaccia e una classe che implementa l'interfaccia.
file: InterfaceNamespace.php
<?php
namespace InterfacciaNamespace;
interface SalutoInterfaccia {
public function diCiao();
}
class Saluto implements SalutoInterfaccia {
public function diCiao() {
echo "Ciao dal namespace InterfacciaNamespace!";
}
}
?>
file: index.php
<?php
require 'InterfaceNamespace.php';
use InterfacciaNamespace\Saluto;
$saluto = new Saluto();
$saluto->diCiao(); // Output: Ciao dal namespace InterfacciaNamespace!
?>