4

PHP 有 get_call_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.

编辑:我试图让被调用的类和方法自动传递给视图函数。所以在我的控制器动作中,我可以拥有:

$this->render();

代替:

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

我的 __construct 会自动设置

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

3 回答 3

2

以“文件名:[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 回答
1

我认为你可以使用__METHOD__.

http://php.net/manual/en/language.constants.predefined.php

否则,正如其他人提到的,它应该返回 __construct。

于 2013-10-22T18:42:58.783 回答
0

正如 DCoder 所写,您根本不会调用 myMethod()。您构造的是 Parent 类对象,而不是 Child 类对象,因此不可能以任何方式从 Yout 子类中获取任何函数名称或一般任何东西。

于 2013-10-22T18:46:41.693 回答