4

PHP には get_called_class(); があります。呼び出されたクラスの名前を返します。呼び出されたメソッドの名前を返す関数はありますか? たとえば、親クラスがあります。

class Parent
{
    public function __construct()
    {
        echo get_called_class(); // echos "Child"
        // how do I echo "myMethod"
    }
}

それから私は子供の親を持っています:

class Child extends Parent
{
    public function myMethod()
    {
    }
}

私が電話した場合:

new Parent();

__construct から呼び出されるメソッドの名前 (この場合は "myMethod") を取得するにはどうすればよいですか? 使用する__FUNCTION__と が返されますParent::__construct

EDIT:呼び出されたクラスとメソッドをビュー関数に自動的に渡そうとしています。したがって、コントローラーアクションで次のことができます。

$this->render();

それ以外の:

$this->render('account/new');

そして、私の __construct は自動的に設定されます

$controller = "account"; // from get_called_class();
$action = "new"; // gotten how?!
4

3 に答える 3

2

"filename: [class->][function(): ]" の形式で文字列を取得する単純な関数

<?php
function get_caller_info() {
    $c = '';
    $file = '';
    $func = '';
    $class = '';
    $trace = debug_backtrace();
    if (isset($trace[2])) {
        $file = $trace[1]['file'];
        $func = $trace[2]['function'];
        if ((substr($func, 0, 7) == 'include') || (substr($func, 0, 7) == 'require')) {
            $func = '';
        }
    } else if (isset($trace[1])) {
        $file = $trace[1]['file'];
        $func = '';
    }
    if (isset($trace[3]['class'])) {
        $class = $trace[3]['class'];
        $func = $trace[3]['function'];
        $file = $trace[2]['file'];
    } else if (isset($trace[2]['class'])) {
        $class = $trace[2]['class'];
        $func = $trace[2]['function'];
        $file = $trace[1]['file'];
    }
    if ($file != '') $file = basename($file);
    $c = $file . ": ";
    $c .= ($class != '') ? ":" . $class . "->" : "";
    $c .= ($func != '') ? $func . "(): " : "";
    return($c);
}
?>

次のような使い方:

<?php
function debug($str) {
    echo get_caller_info() . $str . "<br>\n";
}
?>

私の親友であるPHPマニュアルから取られました。

于 2013-10-22T18:47:28.907 に答える
0

DCoder が書いたように、myMethod() はまったく呼び出しません。Child クラス オブジェクトではなく、Parent クラス オブジェクトを作成するため、Yout 子クラスから関数名や一般的なものを取得することはできません。

于 2013-10-22T18:46:41.693 に答える