Будет ли каталог с разрешением автозагрузки прерывать точку на основе пространства имен в Zend Framework? - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть папка в папке моей библиотеки, которая названа в честь моего сайта.Путь к папке выглядит следующим образом:

~ \ www \ library \ myWebsite.com

Если я использую автозагрузчик Zend для загрузки пространства имен всего в пути к библиотеке, возникнут ли у меня какие-либо проблемы?автозагрузка класса из этого файла с пространством имен, подобным следующему:

\ myWebsite.com \ myClass :: myFunction ();

Я просмотрел документацию по этому вопросу и не могу найтилюбая информация об использовании периодов таким образом.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

Я попробовал это, и сложность в PHP. Я думаю, что Zend хорошо регистрирует пространство имен, потому что когда я вызываю \ Zend_Load_Autoloader :: getRegisteredNamespaces (), это показывает, что оно зарегистрировано. но когда я вызываю статический метод из полностью определенного пространства имен, php выдает ошибку этого:

Fatal error: Undefined constant 'myWebsite' in /home/jesse/www/application/controllers/MyController.php on line 15 

Похоже, что PHP завершает идентификатор пространства имен во время синтаксического анализа в. (символ периода). Это разочаровывает, потому что для меня было важно иметь библиотеку, названную в честь веб-сайта.

Я переименую каталог в myWebsitecom или, возможно, сделаю .com его собственным подкаталогом, например

myWebsite \ com и включить его в мое дерево имен, например: \ MyNamespace \ Com \ MyClass :: myFunction ();

0 голосов
/ 04 февраля 2011

Самый простой способ выяснить это - попробовать.

Если это не сработает, вы всегда можете написать собственный автозагрузчик, чтобы он работал.У меня нет большого опыта работы с пространствами имен php, но автозагрузчик будет выглядеть примерно так (я полагаю, вам придется немного поработать с ним, чтобы определить правильный путь к файлу с учетом имени класса):

<?php
class My_Loader_Autoloader_MyWebsite implements Zend_Loader_Autoloader_Interface {

    /**
     * (non-PHPdoc)
     * @see Zend_Loader_Autoloader_Interface::autoload()
     */
    public function autoload($class) {

        if (strtolower(substr($class, 0, 9)) == 'mywebsite') {
            $file = realpath(APPLICATION_PATH . '/../library/myWebsite.com/' . $class);
            if ($file) {
                require_once $file;
                return $class;
            }
        }
        return false;
    }
}

затем поместите это в ваш загрузчик:

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader(new My_Loader_Autoloader_MyWebsite());

, и если этот класс должен быть в этом каталоге myWebsite.com, вы можете просто обмануть и добавить туда требование:

 require_once(APPLICATION_PATH . '/../library/myWebsite.com/Loader/Autoloader/MyWebsite.php');
...