Каковы преимущества и недостатки условного включения файла класса в метод другого класса в PHP? - PullRequest
4 голосов
/ 21 сентября 2010

В этом вопросе о включении всех классов в каталог для интерпретатора, которому нужны все из них, было предложено, чтобы лучшим способом решения проблемы было бы условно включить только командный файл, который необходим для этой итерации интерпретатора. Например, вместо этого:

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 более удобочитаема и удобна в обслуживании. Кто-нибудь может уточнить это? Какие-либо другие преимущества или недостатки?

1 Ответ

2 голосов
/ 21 сентября 2010

Основным преимуществом условной загрузки является то, что она не будет включать в себя все дерево php-файлов при каждой загрузке этого класса. Событие, когда вы используете кэш кода (и вы должны это сделать), файлы проверяются на наличие обновлений каждый раз, когда vm встречает / (include | require) (один раз)? /, Поэтому включение ненужных файлов php будет медленным вниз ваш код.

Недостатки этого конкретного метода в том, что его сложнее поддерживать и легче совершать ошибки. Писать одну вещь дважды - это запах кода. Wirting My_Class означает, что вам нужен этот класс, и запись include "My_Class.php" также означает это. Это не правильно.

Я предлагаю использовать автозагрузку: http://php.net/manual/en/language.oop5.autoload.php

...