而类的加载规则, 都是一样的: Yaf规定类名中必须包含路径信息, 也就是以下划线"_"分割的目录信息. Yaf将依照类名中的目录信息, 完成自动加载. 如下的例子, 在没有申明本地类的情况下:
例 5.1. 一个映射的例子Zend_Dummy_Foo
//Yaf将在如下路径寻找类Foo_Dummy_Bar {类库路径(php.ini中指定的ap.library)}/Foo/Dummy/Bar.php
而, 如果通过如下方式调用了registerLocalNamespace:
例 5.2. 注册本地类
//申明, 凡是以Foo和Local开头的类, 都是本地类 $loader = Yaf_Loader::getIgnstance(); $loader->registerLocalNamespace(array("Foo", "Local"));
那么对于刚才的例子, 将会在如下路径寻找Foo_Dummy_Bar
例 5.3. 一个映射的例子Zend_Dummy_Foo
//Yaf将在如下路径寻找类Foo_Dummy_Bar {类库路径(conf/application.ini中指定的ap.library)}/Foo/Dummy/Bar.php
从Yaf 3.2.0开始,如果用户通过Yaf_Loader::registerNamespace注册了一个namespace和对应的路径的话:
例 5.4. 一个PSR-4的例子Yaf_Loader::registerNamespace
Yaf_Loader::getInstance()->registerNamespace("\Zend\PHP", "/var/lib"); Yaf_loader::getInstance()->registerNamespace(array( "\Zend\Framework" => "/usr/local/lib/zend", "\Microsoft\PHP" => "/usr/lib/php", )); //或者你在配置文件中 new Yaf_Application(["yaf" => [ "library" => [ "namespaces" => [ "\Zend\Loader\" => "/var/lib/loader/zend", ], ], ]);
\Zend\PHP\Foo\Bar -> /var/lib/Foo/Bar.php \Microsoft\PHP\Foo_Bar -> /usr/lib/php/Foo/Bar.php \Zend\Framework\Router\Default -> /usr/local/lib/zend/Router/Defalt.php