$ this-> $ cmd($ arg)在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无法转储函数?

我在这里找到了另一个答案这表明以上内容无论如何都不起作用。但是,它肯定是为$ 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仍被分配与以前相同的值...

大雾天

如您所知,$result并且$args是变量。

如您所料,$this并且$cmd也是ALSO变量。

$ this引用类实例。例如,如果为myClass.a,则任何“ myClass”方法都可以将“ a”引用为“ $ this-> a”。

与许多其他面向对象的语言不同,PHP还支持将成员名称作为变量。它支持“ Variable variables”就是这样$cmd:无论作为参数传递的“ cmd”值是多少,函数都希望找到匹配的方法。

您可以在此处找到更多详细信息:

http://php.net/manual/zh/functions.variable-functions.php

如何以最佳和简单的方式解释“ this”关键字?

至于为什么不点击trace语句-这只是调试问题:

  • “ $ cmd”是否转换为您认为的名称?
  • 您的班级有这种方法吗?
  • 还有其他可能冲突的类吗?
  • 等等

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章