//namespace помогает в разграничении классовnamespaceNS;classTransaction{};//Где то в другом файлеrequire_once'Transaction.php';newTransaction(); // теперь за это банnew NS\Transaction(); // доступно/*****/useNS; // и сразуnewTransaction(); // доступно//namespace можно указывать в виде файловой структуры MyPack\Some\Some и тд.// но это лишь названия// в одном пространстве имен можно использовать классы не указывая их полный путь
Для встроенных классов
namespaceSomeName;classTransaction{publicfunction__construct(){newDateTime(); // бан, так как ищет в SomeName\Datetime, а такого нетnew\DateTime(); // как надо, вызов из глобального пространства имен }}/*****/// или заранееuseDateTime;classTransaction{publicfunction__construct(){newDateTime(); // теперь можно и так }}
Подключение стороннего пространства имен
// имеем файлnamespaceSomeName;classTransaction{publicfunction__construct(){new Notification\Email(); // так сразу нельзя, другое пространство жеж// считается сокращенным именем, которое дополняет// SomeName\Notification\Email();new \Notification\Email(); // так верно, это полная версия }}/****/// локальные функции приоритетнее глобальныхclassTransaction{publicfunction__construct(){var_dump(explode(',','Some, text')); // получим foo так как рядом найдена функция explodevar_dump(\explode(',','Some, text'));// теперь сработает как и должно }}functionexplode($separator,$str){return'foo';}/****///псевдонимы для классовuse Some\Transactionas SomeT; // new SomeT();use Another\Transaction;
Autoload
// убедиться что везде есть namespacespl_autoload_register(function($class)){$path = __DIR__.'/../'.str_replace('\\','/',$class).'.php';//lcfirst если надо App -> appif(file_exists($path)){require$path; }}useApp/Path/To/Class;// теперь все что есть в файле будет подгружено