4

タイトルは少しわかりにくいですが、私ができる最善の方法です。= 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__)
}

これは可能だと漠然と思い出しているようですが、Googleでは見つかりません。間違ったキーワードを検索しているためか。

どんな助けでもいただければ幸いです。

編集:そして、もちろん、私はfunc_get_args()この質問を投稿した後に見つけます。これは私が望むことをしているようですが、より良いアイデアのためにこの質問を残しておきます。

4

4 に答える 4

8

PHP> = 7.0の場合、私は以下を使用します。

parent::{__FUNCTION__}(...func_get_args())
于 2017-07-13T08:03:31.800 に答える
7
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());
}
于 2012-05-16T09:09:19.617 に答える
0

call_user_func_array()関数を使用して呼び出すことができます。

例えば:

 <?php
 function some_function($var1, $var2, $var3)
 {
    call_user_func_array('parent::'.__METHOD__, func_get_args());
 }
 ?>
于 2012-05-16T09:10:46.333 に答える
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());

表現

于 2014-12-31T13:35:51.340 に答える