【问题标题】:php computing a variable on the fly using anonymous functionsphp使用匿名函数即时计算变量
【发布时间】:2012-08-29 16:00:30
【问题描述】:

有时在初始化变量时,您希望向它们传递太复杂而无法在单个命令中计算的值,因此您通常要么先计算一个虚拟变量,然后传递它的值,要么在别处定义一个函数,然后传递它将值返回给我们的变量。

我的问题(希望)是,是否可以使用匿名函数动态计算变量?

例如,不要使用这个:

$post = get_post();
$id = $post->ID;

$array = array(
    'foo' => 'hi!',
    'bar' => $id
);

让我们使用这样的东西:

$array = array(
    'foo' => 'hi!',
    'bar' => (function(){
        $post = get_post();
        return $post->ID;
    })
);

代码是完全随机的。

【问题讨论】:

  • "代码完全随机。"非常不可能的字母组合来自任何类型的随机生成
  • @PeeHaa 是的,它返回 Closure::__set_state(array()) 因为闭包是 Closure 类的实例。

标签: php anonymous-function


【解决方案1】:

在您的示例中,以下内容就可以了:

$array = array('foo'=>'hi!','bar'=>(get_post()->ID));

但是,考虑到您的问题更加开放且不特定于您的代码 sn-p,您可能会发现这个stackoverflow answer acceptable

$a = array('foo' => call_user_func(
    function(){
        $b = 5;
        return $b;
    })
);
var_dump($a);

【讨论】:

  • 一个侧面的问题:为什么你把 $ 在 ID 之前放入 (get_post()->$ID)?并且需要括号?
  • @Bakaburg 我对 ID 前的 $ 不好,我已经用正确的语法更新了帖子。也很可能不需要括号,我只是没有测试我的代码并且正在安全地玩它:)
  • 请在使用这种类型的表示法时考虑内存泄漏:stackoverflow.com/a/6657911/1481489(尽管它已在 5.3.10 中修复)以及一般内存开销和速度:dboskovic.typepad.com/david-boskovic/2010/04/…
猜你喜欢
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 2022-11-10
  • 2017-05-27
相关资源
最近更新 更多