【问题标题】:stdClass and anonymous functionstdClass 和匿名函数
【发布时间】:2013-08-15 10:16:00
【问题描述】:

我可以用匿名函数做到这一点

 $func = function() {
      return "Hello World";
 };
 var_dump($func());

但是,我不能这样做

$namespace->func = function() {
      return "Hello World";
 };
 var_dump($namespace->func());

我会收到这个错误

调用未定义的方法stdClass

到目前为止我发现的解决方法是使用另一个变量

$temp = $namespace->func;
var_dump($temp());

有没有一种方法可以在一行中完成?

【问题讨论】:

  • 你真的需要对象类型吗?如果这只是为了命名空间,一个数组可以处理同样的事情。
  • 我只是想发现所有的可能性。感谢您的建议@Yoshi。这就是我喜欢 Stackoverflow 的原因,因为我不仅能得到答案,还能得到实用的建议。

标签: php stdclass


【解决方案1】:

你可以使用__invoke()

// declare $namespace to be conform to strict standards
$namespace = new StdClass();

$namespace->func = function() {
      return "Hello World";
 };
var_dump($namespace->func->__invoke());

那是因为即使存在func 是一个闭包的属性,PHP 也不会检查它是否是一个闭包并调用它。

【讨论】:

  • 一个小问题,不使用new StdClass();可以吗?还是使用它是一种好习惯?
  • 将您的error_reporting 增加到E_STRICT | E_ALL,您将看到该消息。根据我自己的经验,我可以说遵守严格的标准始终是正确的方法。这样可以避免很多麻烦。
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多