【发布时间】:2009-12-19 14:34:20
【问题描述】:
PHP 中的 OOP 新手
我的一个函数需要在运行之前执行另一个函数。有什么方法可以检查吗?
【问题讨论】:
PHP 中的 OOP 新手
我的一个函数需要在运行之前执行另一个函数。有什么方法可以检查吗?
【问题讨论】:
与语言无关的答案:
保留一个(静态或全局)“状态”变量,并在调用它时在先决条件函数中设置一个标志。检查依赖函数中的标志以确定是否允许运行。
【讨论】:
嗯,最简单的解决方案是在运行需要它的方法之前调用这个方法。如果您不想每次都运行该方法,但仅在对象的某些内部状态适用时,您会这样做
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 语句。
如果方法调用依赖于外部对象的状态,您有多种选择。请告诉我们更多关于这种情况的场景,因为它在某种程度上取决于用例。
【讨论】:
另一个函数(应该首先调用的那个)将操纵一些状态,这就是为什么第二个函数需要知道那个状态。我不知道一个 php 内置函数,但我最终会创建另一个函数,它返回有关该状态的信息,例如isReadyToRunSomething, isValid, hasConnection .. 或者什么的.. 然后在第二个函数的开头使用这个函数,看看是否允许运行。
【讨论】:
观察者模式可用于做你想做的事(通知观察者事件将要发生,以便他们做某事)。
【讨论】:
创建第三个函数 C,它调用 A,然后调用 B,并在所有地方使用这个新函数。在 OOP 术语中,A 和 B 应该在您的类中受到保护,而 C 是公共的,例如可供使用您的课程的任何人使用。
【讨论】: