【问题标题】:Check if function has been called yet检查函数是否已被调用
【发布时间】:2009-12-19 14:34:20
【问题描述】:

PHP 中的 OOP 新手

我的一个函数需要在运行之前执行另一个函数。有什么方法可以检查吗?

【问题讨论】:

    标签: php oop


    【解决方案1】:

    与语言无关的答案:

    保留一个(静态或全局)“状态”变量,并在调用它时在先决条件函数中设置一个标志。检查依赖函数中的标志以确定是否允许运行。

    【讨论】:

    • 一般来说,全局状态变量可能是不合适的。对象成员变量会更好。
    • @troelskn:是的,当然。好电话!
    【解决方案2】:

    嗯,最简单的解决方案是在运行需要它的方法之前调用这个方法。如果您不想每次都运行该方法,但仅在对象的某些内部状态适用时,您会这样做

    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 语句。

    如果方法调用依赖于外部对象的状态,您有多种选择。请告诉我们更多关于这种情况的场景,因为它在某种程度上取决于用例。

    【讨论】:

      【解决方案3】:

      另一个函数(应该首先调用的那个)将操纵一些状态,这就是为什么第二个函数需要知道那个状态。我不知道一个 php 内置函数,但我最终会创建另一个函数,它返回有关该状态的信息,例如isReadyToRunSomething, isValid, hasConnection .. 或者什么的.. 然后在第二个函数的开头使用这个函数,看看是否允许运行。

      【讨论】:

      • 在调用函数之前为什么不做检查...?
      • 一个很好的建议,这样你以后可以毫不费力地改变你确定函数是否可以运行的方式。
      • @Andrew:因为前提条件可能会改变,函数可能会从多个地方调用。这将增加在维护期间引入错误的可能性。检查功能本身的需求将所有逻辑放在一个合理的地方,并最大限度地减少维护工作和引入错误的风险。最小的开销是为此付出的很小的代价。
      【解决方案4】:

      观察者模式可用于做你想做的事(通知观察者事件将要发生,以便他们做某事)。

      【讨论】:

        【解决方案5】:

        创建第三个函数 C,它调用 A,然后调用 B,并在所有地方使用这个新函数。在 OOP 术语中,A 和 B 应该在您的类中受到保护,而 C 是公共的,例如可供使用您的课程的任何人使用。

        【讨论】:

        • 我认为问题是,“除非已经运行了另一个函数,否则如何防止函数运行?”而不是“我怎样才能在调用第二个函数之前总是运行一个特定的函数?”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-08
        相关资源
        最近更新 更多