在Zend Framework(v1)应用程序中使用PHP命名空间

Ben*_*min 13 php zend-framework namespaces autoload zend-autoloader

在当前稳定版本的Zend Framework(1.11)中,是否可以使用PHP命名空间处理应用程序类?

Application\Form\Abc instead of Application_Form_Abc
Application\Model\Xyz instead of Application_Model_Xyz
etc.
Run Code Online (Sandbox Code Playgroud)

从v1.10开始,ZF支持自动加载命名空间,并且在包含命名空间库时它工作正常,但在尝试使用应用程序类执行相同的工作时我没有成功.

Ben*_*min 7

实际上,Dmitry在ZF问题跟踪器上提出了一个简单的解决方法:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoloader()
    {
        $loader = function($className) {
            $className = str_replace('\\', '_', $className);
            Zend_Loader_Autoloader::autoload($className);
        };

        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->pushAutoloader($loader, 'Application\\');
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说就像一个魅力!


Ger*_*che 5

1.12中引入的标准自动加载器允许您以最小的努力使用命名空间:

require 'Zend/Loader/AutoloaderFactory.php';
Zend_Loader_AutoloaderFactory::factory([
    'Zend_Loader_StandardAutoloader' => [
        'autoregister_zf' => true,
        'namespaces' => [
            'Application' => '/path/to/Application/src',
        ]
    ]
]);
Run Code Online (Sandbox Code Playgroud)

现在您可以使用Application\Form\Abc而不是Application_Form_Abc&Application\Model\Xyz而不是Application_Model_Xyz等.

目录/文件结构示例:

路径/到/应用/ src目录/表格/ Abc.php

<?php
namespace Application/Form;
class Abc {}
Run Code Online (Sandbox Code Playgroud)

路径/到/应用/ src目录/型号/ Xyz.php

<?php
namespace Application/Model;
class Xyz {}
Run Code Online (Sandbox Code Playgroud)