在Zend应用程序中,有没有办法定义一个不符合自动加载命名约定的类,并且在我稍后尝试使用它时仍然可以识别它?我想你定义了类并以某种方式使用自动加载器注册它,但在阅读了自动加载器联机帮助页后,我仍然不明白该怎么做。
我的用例是在测试期间(不,我不想在这种情况下使用模拟或存根)。我在测试脚本的顶部定义了一个新类,但是当我的应用程序代码引用该类时,autolader会根据命名约定积极地加载它。
<?php
class Non_Conforming_Dummy_Class
{
}
// should I register this new class with the autoloader right here?
class Whatever
{
public function useIt()
{
$class = new Non_Conforming_Dummy_Class;
}
}
我得到一个'没有这样的文件或目录',它寻找Non / Conforming / Dummy / Class.php
答案 0 :(得分:1)
ZF Autoloader将按照PSR-0约定加载任何类。不遵循该约定的任何类都无法使用Autoloader加载。但是,你可以
注册任意自动加载器回调,可选择使用特定命名空间(或命名空间组)。在使用其内部自动加载机制之前,
Zend_Loader_Autoloader
将尝试匹配这些。
这意味着,您可以将自己的自动加载器知道您的命名方案添加到ZF的自动加载器中:
$autoloader->pushAutoloader(array('myAutoloader', 'autoload'), 'MyPrefix');
请参阅http://framework.zend.com/manual/en/zend.loader.autoloader.html
答案 1 :(得分:0)
当PHP检测到一个尚未注册的类时,自动加载器是一种回退机制,因此,如果您的代码与顶部的代码类似,则不会失败,因为该类已在同一脚本中注册,ej:
class foobar{}
class demo
{
public function foo()
{
$bar = new foobar();
}
}
没有问题,如果你的类在另一个文件中,你可以包含()它,或者需要()它,自动加载器将是找不到类时最后调用的函数。