4

这个关于将所有类包含在需要所有类的解释器的目录中的问题中,建议处理该问题的更好方法是有条件地仅包含解释器迭代所需的命令文件。例如,而不是这个:

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 样式加载更具可读性和可维护性。谁能详细说明这些?还有其他优点或缺点吗?

4

1 回答 1

2

条件加载的主要优点是每次加载该类时它不会包含整个 php 文件树。当您使用代码缓存时(并且应该),每次 vm 遇到 /(include|require)(once)?/ 时都会检查文件是否有更新,因此包含不必要的 php 文件减慢您的代码速度。

这种特定方法的缺点是,它更难维护,也更容易出错。把一件事写两次是一种代码味道。写 My_Class 意味着你需要这个类,写 include "My_Class.php" 也意味着这个。这个不对。

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

于 2010-09-21T12:23:38.263 回答