Недавно я начал играть с Пространствами имен в PHP, я не являюсь поклонником выбранного разделителя Пространств имен /
(как у большинства других есть взаимное чувство) /
Ниже приведен очень простой / простой пример использования пространства имен в PHP.
У меня есть файл Registry.class.php
с классом Registry
, который находится в пространстве имен Library
У меня также есть файл Controller.class.php
ниже, в котором есть класс Controller
, который находится в пространстве имен и называется Project
Теперь в этом Project
Пространстве имен мне нужен доступ к Registry object
, который находится в другом Пространстве имен, Library
Поэтому я использую use Library\Registry
, чтобы Импортировать это Пространство имен
После этого я могу просто получить доступ к своему Registry
классу вот так ...
$this->registry = new Registry;
Теперь, если бы я не использовал use Library\Registry
, тогда я должен был бы получить к нему доступ вот так
$this->registry = new /Library/Registry;
Так вот где начинается мой вопрос.
Для этого простого примера я просто привожу Registry class
, в реальный проект, представьте, что вводятся несколько других классов и пространств имен, поэтому я бы использовал
use Library\Registry
и use Library\SOME OTHER CLASS
и use Library\YET ANOTHER CLASS
и т.д ...
Затем я могу работать с Объектами / классами, как если бы они находились в этом пространстве имен, чтобы начать с того, что вместо предварительной фиксации имени класса с соответствующим именем пространства имен, я просто создаю экземпляр класса по его имени (new Registry;
) вместо new /Library/Registry;
Я хотел бы знать, считается ли это плохой практикой или нет? Это значительно упрощает работу и делает код более понятным IMO, но если в этом методе есть что-то плохое, я хотел бы знать, прежде чем писать много кода с использованием этого метода. Должен ли я быть pre-fixing
моими классами, когда я создаю их экземпляры с их пространством имен INSTEAD импорта их с use /Path/to/Namespace/Classname
?
Пожалуйста, поделитесь своими знаниями со мной, я понимаю, что это будет работать в любом случае, но я хочу убедиться. Примеры классов и пространств имен добавляются ниже:
Controller.class.php
<?php
namespace Project
{
use Library\Registry;
class Controller
{
public $registry;
function __construct()
{
include('E:\Library\Registry.class.php');
$this->registry = new Registry;
}
function show()
{
$this->registry;
echo '<br>Registry was ran inside testcontroller.php<br>';
}
}
}
?>
Registry.class.php
<?php
// Registry.class.php
namespace Library
{
class Registry
{
function __construct()
{
echo 'Registry.class.php Constructor was ran';
}
}
}
?>