如何使用具有相同方法名称的父类方法的参数?

时间:2012-05-16 09:06:40

标签: php codeigniter

我知道,标题有点令人困惑,但这是我能做的最好的。 = P

希望有人能够提供帮助。

我正在使用CodeIgniter,我在基类中有一个方法,它有多个参数:

class MY_Base extends CI_Model {

    function some_function($param1, $param2 ... $param8) {
        // do stuff
    }
}

我想要做的基本上就是这个,在一个儿童班:

class Child extends MY_Base {

    function some_function($param1, $param2 ... $param8) {
        parent::some_function($param1, $param2 ... $param8);
        // call a methods found in this class only
        $this->some_method();
    }

    function some_method() {
        // do more stuff
    }
}

我无法触及基类,因此我必须从中扩展。问题是,参数太多了。这也发生在不同的方法中,有时我会忘记一个使代码失败的方法。

所以我想知道,如果有办法写这样的话:

function some_function(__PARAMETERS__) {
    parent::some_function(__PARAMETERS__)
}

我似乎模糊地回忆起这是可能的,但我无法在谷歌找到它。可能是因为我在搜索错误的关键字。

任何帮助都将不胜感激。

编辑: 然后,当然,我在发布此问题后找到func_get_args()。 这似乎做了我想要的,但我会留下这个问题以获得更好的想法。

4 个答案:

答案 0 :(得分:6)

function some_function($a, $b, $c) {
    call_user_func_array('parent::some_function', func_get_args());
}

警告:PHP> = 5.3

甚至:

function some_function($a, $b, $c) {
    call_user_func_array('parent::' . __FUNCTION__, func_get_args());
}

答案 1 :(得分:6)

对于PHP> = 7.0,我使用:

parent::{__FUNCTION__}(...func_get_args())

答案 2 :(得分:0)

您可以使用call_user_func_array()功能调用它。

例如:

 <?php
 function some_function($var1, $var2, $var3)
 {
    call_user_func_array('parent::'.__METHOD__, func_get_args());
 }
 ?>

答案 3 :(得分:0)

您可以在最父类

中声明以下callParent()方法
/**
 * Calls the parent class's same function, passing same arguments.
 * This is similar to ExtJs's callParent() function, except that agruments are 
 * FORCED to be passed (in extjs, if you call this.callParent() - no arguments would be passed,
 * unless you use this.callParent(arguments) expression instead)
 */
function callParent() {

    // Get call info from backtrace
    $call = array_pop(array_slice(debug_backtrace(), 1, 1));

    // Make the call
    call_user_func_array(get_parent_class($call['class']) . '::' . $call['function'], $call['args']);
}

因此,在您的子类方法中,如果要调用父方法,则可以使用

$this->callParent(); 

而不是

call_user_func_array('parent::' . __FUNCTION__, func_get_args());

表达