1

DRY Module.php 有标准方法吗?我有几个像这样的简单 Module.php 文件

<?php
namespace SolImporter;

class Module
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
}

只有命名空间不同,当然 PHPCPD 会抱怨这一点。

4

1 回答 1

1

你可以这样做。但是,您创建了另一个模块并不真正需要的依赖项。此外,如果不进行反思,您将无法获得__DIR__您孩子的班级。并且反射会损害您的性能,特别是如果您对每个模块类都使用它(并且每个模块类根据其原理,在每个请求上都加载)。

但它是这样的:

namespace MyCommon\Module;

class AbstractModule
{
    public function getAutoloaderConfig()
    {
        $dir       = $this->getDir();
        $namespace = $this->getNamespace();

        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    $namespace => $dir . '/src/' . $namespace,
                ),
            ),
        );
    }

    public function getConfig()
    {
        $dir = $this->getDir();

        return include $dir . '/config/module.config.php';
    }

    protected function getDir()
    {
        $reflection = new ReflectionClass($this);
        return dirname($reflection->getFileName());
    }

    protected function getNamespace()
    {
        return str_replace('\Module', '', get_class($this));
    }
}

像这样使用它:

namespace MyModule;

use MyCommon\Module\AbstractModule;

class Module extends AbstractModule
{
}
于 2013-10-08T08:36:12.330 回答