пространства имен php на лету - PullRequest
0 голосов
/ 23 декабря 2010

Вчера я задал вопрос о пространствах имен, на которые получил ответ, и поэтому я задержался. Однако чем дальше я углубляюсь в это, тем больше осознаю, что мне действительно хотелось бы иметь возможность генерировать пространства имен на лету. Причина в том, что у меня есть каталог плагинов, куда включаются все файлы. Если кто-то из моей компании делает плагин ... или сторонний, я не хочу, чтобы он беспокоился о пространствах имен. Я хотел бы просто генерировать пространства имен на лету по структуре каталогов. Вы говорите: «Почему бы просто не сделать это!» Ну, я так и сделал, но я понимаю, что у меня все еще есть потенциальная проблема с именами классов, и пространства имен разрешат эту проблему. Пакеты также решили бы эту проблему, но я не могу найти, что php поддерживает их.

-plugin
    -tabs
      +tabs.php
    -package
        -tabs
            +tabs.php

Идея состоит в том, чтобы иметь доступ к классам с помощью $ tabs-> func () и $ package_tabs-> func ();

Опять же, это не проблема, за исключением того, что классы могут быть названы одинаково.

У меня есть обходной путь, но если кто-нибудь знает обходной путь для динамического создания пространств имен на лету, было бы интересно услышать.

Единственная проблема, которую я вижу, состоит в том, что PHP создает пространство имен во время «компиляции». Поэтому использование чего-то вроде fsocks для передачи в пространство имен было неудачной попыткой.

1 Ответ

2 голосов
/ 23 декабря 2010

Это невозможно сделать динамически. Как вы упоминаете, PHP расширяет фреймворк во время компиляции, поэтому ничто в самом PHP не может это изменить.

Теперь вы можете создать программу для "установки" этих сценариев, пройдя через структуру каталогов и проверив пространство имен. И если он не находит, автоматически отредактируйте файл и добавьте определение пространства имен вверху. Но имейте в виду, что это будет проблематично, поскольку любые используемые классы, вероятно, не будут полностью квалифицированы (и, следовательно, выдают ошибки во время компиляции).

Так что лучшим способом было бы просто разработать классы с пространствами имен с самого начала. Это не так сложно сделать, и может быть легко задокументировано ...

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