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

时间:2013-10-22 18:36:39

标签: php class methods

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?!

3 个答案:

答案 0 :(得分: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 Manual,这是我最好的朋友。

答案 1 :(得分:0)

我认为您可以使用__METHOD__

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

否则正如其他人所说,它应该返回__construct。

答案 2 :(得分:0)

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