Dyrektywa use i przestrzenie nazw w OOP w PHP
Załóżmy, że mamy następującą klasę Data:
<?php
namespace \Core\Admin;
class Data
{
public function __construct($num)
{
}
}
?>
Załóżmy również, że istnieje klasa Page, tworząca
wewnątrz siebie obiekty klasy Data:
<?php
namespace Users;
class Page
{
public function __construct()
{
$data1 = new \Core\Admin\Data('1');
$data2 = new \Core\Admin\Data('2');
}
}
?>
Jak widzicie, obie nasze klasy znajdują się
w całkowicie różnych przestrzeniach nazw, dlatego
wywołań klasy Data nie można uprościć,
podobnie jak robiliśmy to w poprzedniej
lekcji. Te wywołania są jednak bardzo długie
i niewygodne, ponieważ w każdym wywołaniu klasy
Data trzeba podawać jego długą
przestrzeń nazw.
Aby rozwiązać ten problem, istnieje
specjalna komenda use. Za pomocą
tej komandy wystarczy raz podłączyć
klasę po jej pełnej nazwie, a po tym
można będzie odwoływać się do tej klasy po prostu
po nazwie klasy. Spójrzcie na przykład:
<?php
namespace Users;
use \Core\Admin\Data; // podłączamy klasę
class Page extends Controller
{
public function __construct()
{
$data1 = new Data('1'); // wywołujemy po prostu po nazwie
$data2 = new Data('2'); // wywołujemy po prostu po nazwie
}
}
?>
Uprośćcie następujący kod przy użyciu
use:
<?php
namespace Project;
class Test
{
public function __construct()
{
// Tworzymy 3 obiekty jednej klasy:
$data1 = new \Core\Users\Data('user1');
$data2 = new \Core\Users\Data('user3');
$data3 = new \Core\Users\Data('user3');
}
}
?>
Dane są następujące klasy:
<?php
namespace Core\Admin;
class Controller
{
}
?>
<?php
namespace Users;
class Page extends \Core\Admin\Controller
{
}
?>
Uprośćcie kod dziedziczenia klasy, stosując
komendę use.