【发布时间】:2015-06-27 22:04:37
【问题描述】:
我正在尝试逐步执行一些不是我编写的 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 仍然被赋予与以前相同的值......
【问题讨论】:
-
正如你所说,它只是调用了值名称为
$cmd的方法,$args是参数,非常简单! -
@Rizier123 这怎么会有用?
-
@Rizier123 这就是我的想法,但我在该方法中所做的任何事情(例如放置跟踪输出)似乎都没有发生。
-
@Michael 你有输出缓冲吗?
-
如果所讨论的类是控制器或类命令,那么很有可能它在某处调用子类的“info”方法。
标签: php