Разве плохо включать все пространства имен и обращаться к классам, используя только их имя в PHP? - PullRequest
3 голосов
/ 31 декабря 2011

Недавно я начал играть с Пространствами имен в 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';
        }
    }
}
?>

1 Ответ

3 голосов
/ 31 декабря 2011

Одной из основных целей пространств имен является предотвращение конфликтов имен в больших базах кода, а также между общим кодом и импортированными библиотеками.Если у вас нет проблем с именами, то я не обязательно вижу ничего плохого в использовании каждого класса.Однако, если вы обнаружите, что делаете это для всех ваших классов, я бы спросил, почему вы в первую очередь используете пространства имен.Мне кажется, это имеет смысл только в том случае, если кто-то еще будет использовать ваш код в качестве API или библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...