【问题标题】:php Overwrite method and call the overwrittenphp Overwrite 方法并调用被覆盖的
【发布时间】:2013-06-02 18:03:40
【问题描述】:

我知道只需使用另一个方法名称就可以避免这种情况,但我很好奇以下是否可行。

我有这个类:(当然它还有一些方法,但它们与问题无关)

class db extends mysqli {
    public function query($sql){
        $sql = $this->parent->query($sql);

        if($this->error){
            echo "<script>popup('SQL error bro!');</script>";
        }else{
            return $sql;
        }
    }
}

我想做的是从我创建的 query() 方法中调用原始的 mysqli query() 方法。有可能还是我要开始重命名?

我还想指出,这纯粹是为了开发使用,我知道用户不应该看到 sql 错误。我想这样做的原因是,今天我需要将表列名从 id 更改为 vid,然后我的整个系统停止工作,我花了 30 分钟研究,我只是想防止将来发生这种情况。

【问题讨论】:

    标签: php class methods overwrite


    【解决方案1】:

    改变

    $this->parent->query($sql);
    

    $sql = parent::query($sql);
    

    【讨论】:

    • 由于某种原因,这些语法都不会引发错误,但是当我故意引发错误时,也没有一个会回应那个小脚本。 O.o
    • 这个问题像往常一样愚蠢。这个类是单例的,在 getInstance 方法中我调用的是 new mysqli 而不是 new db。谢谢!
    【解决方案2】:

    可能但可能不是最佳做法:

    parent::query($sql)
    

    【讨论】:

    • 为什么你认为它可能不是最佳实践?
    • 我不侦察,但有些人会抱怨 :: 看起来你在调用一个静态方法,而你不是。
    【解决方案3】:

    可以通过调用来调用超类的方法

    parent::query();
    

    另请参阅: http://www.php.net/manual/en/keyword.parent.php

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多