$ this-> $ cmd($ arg)在PHP中意味着什么?

时间:2015-04-20 23:50:15

标签: php

我正试图逐步完成一些我没写过的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仍然被赋予与之前相同的值...

1 个答案:

答案 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?

至于为什么你没有点击你的跟踪声明 - 这只是一个调试问题:

  • " $ cmd"翻译成你认为它的名字?
  • 你的班级有这样的方法吗?
  • 是否有其他类可能存在冲突?

如果可能的话,我会启动您最喜欢的PHP调试器并单步执行代码。

以下是一些支持PHP调试的IDE:

http://www.sitepoint.com/best-php-ide-2014-survey-results/