有条件地在PHP中的另一个类的方法中包含类文件有什么优点和缺点?


this question关于将所有类包含在需要所有这些类的解释器的目录中,有人建议处理问题的更好方法是有条件地仅包括解释器的这次迭代所需的Command文件.例如,而不是这样:

require_once('CommandA.php');
require_once('CommandB.php');
require_once('CommandC.php');

class Interpreter {

    public function interpret($action) {
        switch($action) {
            case 'A':
                $c = new A();
                $c->execute();
                break;
        }
    }
}

做更像这样的事情:

class Interpreter {

    public function interpret($action) {
        switch($action) {
            case 'A':
                require_once('CommandA.php');
                $c = new A();
                $c->execute();
                break;
        }
    }
}

使用第二种选择有什么优点和缺点 – 动态和有条件地只加载所需的命令 – 而不是第一种 – 包括文件头部的所有文件,C风格?

在我之前提出的问题的答案中,速度,足迹和易写性被列为有条件加载的优势.在解决这个问题的其他问题中,我看到它表明c风格的加载更具可读性和可维护性.任何人都可以详细说明这些吗?还有其他优点或缺点吗?

最佳答案 条件加载的主要优点是每次加载该类时都不会包含整个php文件树.当您使用代码缓存时(并且您应该),每次vm遇到/(包括|要求)(一次)时都检查文件是否更新?/,因此包含不必要的php文件会降低代码速度.

这种特殊方法的缺点是,它更难维护,更容易出错.两次写一件事是代码气味. Wirting My_Class意味着你需要这个类,而写作包含“My_Class.php”也意味着这个.这个不对.

我建议使用自动加载:http://php.net/manual/en/language.oop5.autoload.php

点赞