使用匿名函数动态计算变量的 PHP 代码

5
有时在初始化变量时,您想传递太复杂以至于无法在单个命令中计算的值,因此通常要么在之前计算一个虚拟变量,然后传递其值,要么定义一个函数在其他地方,并将其返回值传递给我们的变量。
我的问题(希望)是,是否可以使用匿名函数动态计算变量?
例如,不使用以下内容:
$post = get_post();
$id = $post->ID;

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

让我们使用类似这样的内容:
$array = array(
    'foo' => 'hi!',
    'bar' => (function(){
        $post = get_post();
        return $post->ID;
    })
);

代码是完全随机的。


1
代码是完全随机的。这是任何随机生成方式中都不太可能出现的字母组合。 - user557846
@PeeHaa 是的,由于闭包是 Closure 类的实例,所以它返回 Closure::__set_state(array()))。 - Bakaburg
1个回答

1
在您的例子中,以下内容就足够了:
$array = array('foo'=>'hi!','bar'=>(get_post()->ID));

然而,考虑到您的问题有点开放性,不特定于您的代码片段,您可能会发现这个stackoverflow答案是可以接受的。

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

一个旁边的问题:为什么你在 (get_post()->$ID) 中在 ID 前面加上 $?括号是必需的吗? - Bakaburg
1
@Bakaburg,我的错,ID前面的$符号已经更新为正确的语法。另外,括号可能不是必需的,我只是没有测试我的代码,所以采取了保险措施 :) - zamnuts
1
在使用这种符号表示法时,请考虑内存泄漏问题:https://dev59.com/VXRA5IYBdhLWcg3wuAcp#6657911(尽管在5.3.10中已经修复)。同时还要考虑一般的内存开销和速度问题:http://dboskovic.typepad.com/david-boskovic/2010/04/php-anonymous-function-benchmarks.html。 - zamnuts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接