我正试图逐步完成一些我没写过的PHP代码,而且我陷入了僵局,我无法弄清楚如何继续。
我已达到类成员函数,如下所示:
public function exec($cmd, $args) {
// ... some argument checks here
$result = $this->$cmd($args);
这段代码在做什么? $ cmd的值是字符串“info”,所以我假设它正在调用成员函数“info”...但是当我将跟踪代码放在该函数的顶部时,它不会产生任何输出。
我也尝试过使用var_dump($ this-> $ cmd),但它会打印出NULL。然而,函数被调用并返回结果,所以var_dump可能无法转储函数吗?
我找到了另一个答案here,这表明上述情况无论如何都不行。但是,它确实为$ result分配了一个复数值,我可以在调用返回后转储它。
如果重要,我的跟踪代码如下。我正在查看Apache error.log文件,它在其他地方工作正常,所以我假设跟踪代码是好的:
$STDERR = fopen('php://stderr', 'w+');
ob_start();
var_dump($some_variable);
$result999 = ob_get_clean();
fwrite($STDERR, "TRACE: $result999\n");
fclose($STDERR);
更新:
我还尝试将一个空的return语句作为“info”函数的第一行,但$result
仍然被赋予与之前相同的值...
答案 0 :(得分:4)
如您所知,$result
和$args
是变量。
您可以猜到,$this
和$cmd
ALSO 变量。
$ this指的是类实例。例如,如果myClass.a
,那么" a"任何" myClass"都可以引用方法为" $ this-> a"。
PHP与许多其他面向对象的语言不同,它还支持成员名称作为变量。它支持"Variable variables'。 $cmd
是什么:" cmd"作为参数传递,函数期望找到匹配的方法。
您可以在此处找到更多详细信息:
http://php.net/manual/en/functions.variable-functions.php
How to explain 'this' keyword in a best and simple way?
至于为什么你没有点击你的跟踪声明 - 这只是一个调试问题:
如果可能的话,我会启动您最喜欢的PHP调试器并单步执行代码。
以下是一些支持PHP调试的IDE: