而类的加载规则, 都是一样的: 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