5.2. 类的加载规则

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