Проверьте, была ли вызвана функция - PullRequest
4 голосов
/ 19 декабря 2009

Новое в ООП в PHP

Одна из моих функций требует выполнения другой функции перед запуском. Есть ли способ проверить это?

Ответы [ 5 ]

15 голосов
/ 19 декабря 2009

Не зависящий от языка ответ:

Сохраняйте (статическую или глобальную) переменную «состояние» и устанавливайте флаг в обязательной функции при ее вызове. Установите флажок в зависимой функции, чтобы решить, разрешено ли ее запускать.

7 голосов
/ 19 декабря 2009

Что ж, самое простое решение - просто вызвать этот метод, прежде чем запускать метод, который нуждается в нем. Если вы не хотите запускать метод каждый раз, но только когда применяется какое-то внутреннее состояние вашего объекта, вы должны сделать

class Foo
{
    protected $_someState = 'originalState';

    public function runMeFirst()
    {
        // code ...
        $this->_someState = 'changedState';
    }

    public function someMethod()
    {
        if(!$this->_someState === 'changedState') {
            $this->runMeFirst();
        }
        // other code ...
    }
}

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

Если вызов метода зависит от состояния внешнего объекта, у вас есть несколько вариантов. Пожалуйста, расскажите нам больше о сценарии в этом случае, так как он в некоторой степени зависит от варианта использования.

4 голосов
/ 19 декабря 2009

Другая функция (та, которая должна вызываться первой) будет манипулировать некоторым состоянием, поэтому вторая функция должна знать об этом состоянии. Я не знаю о встроенном php для этого, но я бы в конечном итоге создал другую функцию, которая возвращает информацию об этом состоянии, например, isReadyToRunSomething, isValid, hasConnection .. или как угодно .. затем используйте эту функцию в начале второй функции, чтобы увидеть, разрешено ли ее выполнение.

1 голос
/ 19 декабря 2009

Шаблон наблюдателя можно использовать, чтобы делать то, что вы хотите (уведомите наблюдателей о том, что событие должно произойти, чтобы они могли что-то сделать).

0 голосов
/ 19 декабря 2009

Создайте третью функцию C, которая вызывает A, а затем B, и используйте эту новую функцию повсеместно. С точки зрения ООП, A и B должны быть защищены в вашем классе, а C является общедоступным, например, доступно для любого, кто использует ваш класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...