【问题标题】:PHP overloading a function from a parent classPHP从父类重载函数
【发布时间】:2011-03-14 04:39:30
【问题描述】:

我有一个我认为应该有效的东西,但它没有。

我有几个 Controller_## 类,它们都是从 Controller_Core 扩展而来的。每个 Controller_##-class 都有一个公共函数 Save()。现在我想我想执行一些其他常规检查(为每个 $_POST-var 添加斜杠)并认为如果我将公共函数 Save() 添加到 Controller_Core 它将默认执行,因为 ##-class 扩展自它.然而,事实并非如此。

我的问题;我想要达到的目标有可能吗?还是我误以为这会奏效?

【问题讨论】:

    标签: php oop overloading


    【解决方案1】:

    在方法的子类版本中调用parent::Save()

    http://php.net/manual/en/keyword.parent.php

    【讨论】:

    • 它不必是第一行,也可以是'::'
    • “子类的第一行”不需要是第一行,但必须在函数中而不是类中
    • @Jens:为什么第一行,我们不能覆盖一个函数并在其执行的任何时候调用 parent 吗?
    • 嗯好吧,我知道这是可能的,但我有点认为 PHP 会在所有继承的类中查找相等的函数调用,然后执行它们。但是感谢您的回答,我将在所有 Controller_##-classes 中添加该行。
    • 已编辑。只是直观的理解是父母做了一些事情,然后孩子在父母已经做过的事情上进行了扩展。所以parent::Save() 通常是第一位的。
    【解决方案2】:

    或者您可以应用重构来提取核心类的常见行为:

    class Controller_Core {
    
        public function save() {
            if ( ! $this->_validateInfo() ) {
    
                return false;
            }
    
            return $this->_doSave();
        }
    
        protected function _validateInput() {
            //-- do stuff
    
            return true;
        }
    
        protected function _doSave() {
            //-- do stuff
    
            return true;
        }
    
    }
    

    您在子类中编写特定代码,如:

    class Controller_Extended extends Controller_Core {
    
        protected function _doSave() {
    
            //-- a new return
            return true;
        }
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2017-02-02
      • 2011-06-09
      相关资源
      最近更新 更多