我知道,标题有点令人困惑,但这是我能做的最好的。 = 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()
。
这似乎做了我想要的,但我会留下这个问题以获得更好的想法。
答案 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());
表达