替代包括并要求PHP

时间:2015-05-21 19:16:53

标签: php composer-php

我正在使用Sensio Insights来检测我的架构中的错误。

我有一个基本的模板类,它使用输出缓冲区来渲染模板的输出。

private function output() {
    if (is_readable($this->file)):
        extract($this->data);
        ob_start();
        require $this->file;
        $output = ob_get_contents();
        ob_end_clean();

        return $output;
    else:
        trigger_error('Error: Could not load template ' . $this->file . '!');
    endif;
}

见解是强制性的:

  

使用include()或require()绕过第三方的延迟加载   类。喜欢使用自动加载。

这些文件不是类,不能自动加载。

我是否应该忽略这些错误,或者是否存在自动加载类型环境,我可以将其设置为延迟加载非类文件?

我通读了作曲家文档,并指出你只能将文件自动加载器用于每次执行时要加载的文件,例如实用程序函数等。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

你应该忽略这些错误吗?这取决于。

是的,如果您不想更改模板渲染类的代码,则必须忽略它们。该警告是一个通用的警告,应该告诉您使用不需要的功能,如果您可以使用自动加载(稍微省略自动加载功能会触发完全相同的错误 - 但自动加载通常由Composer完成)现在,并且不属于您自己的代码库。)

不,如果您有兴趣制作更好,更可测试的代码库,则不应忽略该错误。在测试时,你在代码中做了一些可怕的事情 - 你无法真正测试该功能及其副作用:

  1. 您正在执行PHP代码来呈现模板。虽然它一般没有任何问题(PHP是作为模板引擎构建的),但该函数并不能真正处理可能发生的PHP错误 - 它假定代码执行得很好。
  2. trigger_error()完成的错误处理也无法以简单的方式进行测试。向面向对象程序通知错误的更好方法是抛出异常。
  3. 因此,如果您使用Sensio的静态代码分析"来检测您的架构中的错误,我会说它在您的代码中找到了一些看法。

    你可以保持原样,并认为这是一种高效的模板渲染方式(可能确实如此)。你也可以说它在低级函数中做得太多,直接击中裸金属而不是抽象掉东西,并试图摆脱它(周围有很多非常好的模板引擎)。

    你不能做的事:将这个地方改成某种自动加载方式。您必须将模板放入类中并使用它们才能触发自动加载。