Il comando use e gli spazi dei nomi nella OOP in PHP
Supponiamo di avere la seguente classe Data:
<?php
namespace \Core\Admin;
class Data
{
public function __construct($num)
{
}
}
?>
Supponiamo anche che ci sia una classe Page, che crea
al suo interno oggetti della classe Data:
<?php
namespace Users;
class Page
{
public function __construct()
{
$data1 = new \Core\Admin\Data('1');
$data2 = new \Core\Admin\Data('2');
}
}
?>
Come puoi vedere, entrambe le nostre classi si trovano
in spazi dei nomi completamente diversi, quindi
le chiamate alla classe Data non possono essere semplificate,
in modo simile a come abbiamo fatto nella lezione
precedente. Queste chiamate, tuttavia, sono molto lunghe
e scomode, poiché in ogni chiamata alla classe
Data bisogna specificare il suo lungo
spazio dei nomi.
Per risolvere questo tipo di problema esiste
un comando speciale use. Con
questo comando è sufficiente includere la classe
una volta per il suo nome completo, e dopo di che
si potrà accedere a questa classe semplicemente
per nome. Guarda l'esempio:
<?php
namespace Users;
use \Core\Admin\Data; // includiamo la classe
class Page extends Controller
{
public function __construct()
{
$data1 = new Data('1'); // chiamiamo semplicemente per nome
$data2 = new Data('2'); // chiamiamo semplicemente per nome
}
}
?>
Semplifica il seguente codice utilizzando
use:
<?php
namespace Project;
class Test
{
public function __construct()
{
// Creiamo 3 oggetti di una stessa classe:
$data1 = new \Core\Users\Data('user1');
$data2 = new \Core\Users\Data('user3');
$data3 = new \Core\Users\Data('user3');
}
}
?>
Date le seguenti classi:
<?php
namespace Core\Admin;
class Controller
{
}
?>
<?php
namespace Users;
class Page extends \Core\Admin\Controller
{
}
?>
Semplifica il codice di ereditarietà della classe, applicando
il comando use.