📢 Nuovo Corso Laravel API disponibile!

Esercizi Namespace PHP

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!
?>