Новое для ООП в PHP
Одна из моих функций требует выполнения другой функции перед запуском. Есть ли способ проверить это?
Ответ на язык-агностик:
Храните (статическую или глобальную) переменную состояния и устанавливайте флаг в рамках функции предварительного требования при ее вызове. Проверьте флаг в зависимой функции, чтобы решить, разрешено ли ему запускаться.
Наилучшим образом, самым простым решением было бы просто вызвать этот метод, прежде чем запускать метод, который ему нужен. Если вы не хотите запускать этот метод каждый раз, но только при наличии какого-либо внутреннего состояния вашего объекта, вы бы сделали
class Foo { protected $_someState = 'originalState'; public function runMeFirst() { // code ... $this->_someState = 'changedState'; } public function someMethod() { if(!$this->_someState === 'changedState') { $this->runMeFirst(); } // other code ... } }
Пока метод и состояние, которые необходимо проверить и вызвать, находятся в том же классе, что и метод, который вы хотите вызвать, это, вероятно, лучшее решение. Как и в других местах, вы можете сделать чек для someState отдельной функцией в классе, но это не совсем необходимо. Я бы это сделал, если бы мне пришлось проверять состояние из нескольких мест, чтобы предотвратить дублирование кода, например, нужно снова и снова писать одно и то же заявление.
Если вызов метода зависит от состояния внешнего объекта, у вас есть несколько параметров. Расскажите, пожалуйста, больше о сценарии в этом случае, так как он несколько зависит от использования.
Другая функция (та, которая должна быть вызвана первой) будет манипулировать некоторым состоянием, поэтому вторая функция должна знать об этом состоянии. Я не знаю о php builtin для этого, но в конечном итоге создаю еще одну функцию, которая возвращает информацию об этом состоянии, например isReadyToRunSomething
, isValid
, hasConnection
.. или что-то еще .. затем используйте эту функцию в начале второй функции, чтобы проверить, разрешено ли ему работать.
Шаблон наблюдателя можно использовать, чтобы делать то, что вы хотите (уведомите наблюдателей, что событие произойдет, чтобы они могли что-то сделать).
Создайте третью функцию C, которая вызывает A, а затем B, и используйте эту новую функцию повсюду. В терминах ООП A и B должны быть защищены в вашем классе, а C является общедоступным, например, для тех, кто использует ваш класс.