我的库文件夹中有一个以我的网站命名的文件夹。文件夹路径如下:
~\www\library\myWebsite.com
如果我使用 Zend 自动加载器来加载库路径中所有内容的命名空间,那么从该文件中自动加载具有如下命名空间的类会不会有任何问题:
\myWebsite.com\myClass::myFunction();
我在网上查找了有关这方面的文档,但找不到任何有关以这种方式使用句点的信息。
我的库文件夹中有一个以我的网站命名的文件夹。文件夹路径如下:
~\www\library\myWebsite.com
如果我使用 Zend 自动加载器来加载库路径中所有内容的命名空间,那么从该文件中自动加载具有如下命名空间的类会不会有任何问题:
\myWebsite.com\myClass::myFunction();
我在网上查找了有关这方面的文档,但找不到任何有关以这种方式使用句点的信息。
我试过了,复杂的是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();
找出答案的最简单方法是尝试一下。
如果它不起作用,您总是可以编写一个自定义自动加载器来使其工作。我对 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');