以某种方式可能吗?如果是这样的话怎么样?! 我知道我可以通过一个参数,但我希望它是动态的!
<?php
class my_class {
protected $parent = NULL;
public function __construct() {
// now i'd like to get the name of the function where this class has been called
$this->parent = get_parent_function();
}
public function parent() {
return $this->parent;
}
}
function some_random_function() {
// Do something
$object = new my_class();
print $object->parent(); // returns: some_random_function
}
?>
提前致谢!
答案 0 :(得分:5)
坦率地说,这似乎是一个非常糟糕的设计选择,但是可以使用PHP内置debug_backtrace
函数使用调用堆栈内省来做到这一点。以下示例来自php documentation for debug_backtrace
:
<?php
// filename: /tmp/a.php
function a_test($str)
{
echo "\nHi: $str";
var_dump(debug_backtrace());
}
a_test('friend');
?>
<?php
// filename: /tmp/b.php
include_once '/tmp/a.php';
?>
如果执行b.php,输出可能如下所示:
Hi: friend
array(2) {
[0]=>
array(4) {
["file"] => string(10) "/tmp/a.php"
["line"] => int(10)
["function"] => string(6) "a_test"
["args"]=>
array(1) {
[0] => &string(6) "friend"
}
}
[1]=>
array(4) {
["file"] => string(10) "/tmp/b.php"
["line"] => int(2)
["args"] =>
array(1) {
[0] => string(10) "/tmp/a.php"
}
["function"] => string(12) "include_once"
}
}
如果你很聪明,你可以使用回溯中函数的函数名称来调用它,例如debug_backtrace()[1]['function']()
,但只有在您当前正在执行的范围内定义函数时才会起作用。有关通过字符串中的名称调用函数的详细信息,请参阅php documentation on variable functions。
在我看来,你应该没有理由在精心设计的程序中这样做。也许您应该考虑使用对象和对象的引用。
答案 1 :(得分:1)
您也可以使用(即使可能有更好的设计):
public function __construct($functionname = NULL) {
$this->parent = $functionname;
}
然后只是:
function some_random_function() {
// Do something
$object = new my_class('some_random_function');
print $object->parent(); // returns: some_random_function
}
答案 2 :(得分:0)
如果要获取调用my_class
构造函数的函数的名称,可以使用PHP的debug_backtrace,如下所述: