【问题标题】:Is it possible to obtain the code from an anonymous function in PHP?是否可以从 PHP 中的匿名函数获取代码?
【发布时间】:2011-05-29 13:51:17
【问题描述】:

假设我有一个匿名函数:

$func = function() { return true; }

我想(动态地)从变量$func 中获取字符串"return true;"

【问题讨论】:

  • 不管你用这个做什么,如果它不只是为了你。住手!
  • 我认为您将 PHP 与 Javascript 混为一谈。后者确实允许这样做。但 PHP 不保留原始正文,只保留字节码。
  • 反射使得获取文件名和行号成为可能,所以这不是直接可能的或很容易的,但它是可能的。您正在寻找的答案是here

标签: php reflection anonymous-function


【解决方案1】:

你可以反映这样的功能:

$test = function() { return true; };

$r = new ReflectionFunction($test);
var_dump($r->getName());

但是从我在手册中可以看到,PHP 的反射 API 没有提供任何可以返回函数源的方法。您可以获取函数声明的开始行和结束行,结合这种代码风格:

$test = function() {
    return false;
}

会让你很容易获得函数的源代码。但请记住,这非常棘手,就像@Col。弹片和@DampeS8N 提到:你真的不想这样做

【讨论】:

  • 感谢您至少回答这个问题。
【解决方案2】:

不,你不能。代码被解析,不存在字符串表示。

【讨论】:

  • 当然可以 - 在源文件中。唯一的例外是您使用create_function()eval() 创建的函数,但是如果您声明了一个闭包(如问题中的示例),而内存中可能没有源代码,当然有源代码-它后面的代码,在声明函数的文件中。 ReflectionFunction包括getFileName()getStartLine()getEndLine(),所以比较复杂,但是可以得到源码。
猜你喜欢
  • 2016-06-22
  • 2011-12-14
  • 2019-05-31
  • 1970-01-01
  • 2011-03-29
  • 2022-12-01
  • 2023-02-07
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多