PHP:你如何从构造函数中获取调用的方法


PHP: how do you get the method called from the constructor?

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.

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

$this->render();

而不是:

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

我的__construct将自动设置

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

"文件名: [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手册,这是我最好的朋友。

我认为您可以使用__METHOD__.

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

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

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