Php 为什么闭包的内存使用更大

Php 为什么闭包的内存使用更大,php,Php,我意识到,闭包会消耗更多的内存。有人能帮我理解为什么会这样吗?此外,如果有以下结果,是否不建议使用闭包 $value=10; $memory=memory\u get\u usage(); $fun=静态函数($add,$value){ $value+=$add; echo美元价值; }; $fun(10$value); 回音“|”$价值"内存:'。(memory_get_usage()-$memory); 输出: 20 | 10 |内存:368 $value=10; $memory=memo

我意识到,闭包会消耗更多的内存。有人能帮我理解为什么会这样吗?此外,如果有以下结果,是否不建议使用闭包

$value=10;
$memory=memory\u get\u usage();
$fun=静态函数($add,$value){
$value+=$add;
echo美元价值;
};
$fun(10$value);
回音“|”$价值"内存:'。(memory_get_usage()-$memory);
输出:

20 | 10 |内存:368

$value=10;
$memory=memory\u get\u usage();
$closure=静态函数(int$add)使用($value){
$value+=$add;
echo美元价值;
};
元(10);;
回音“|”$价值"内存:'。(memory_get_usage()-$memory);
输出:

20 | 10 |内存:752

(对象也是如此)

来自:

  • 使用是早期绑定。这意味着在定义闭包时复制变量值。因此,在 闭包没有外部效果,除非它是指针,比如对象 是
  • 这意味着,在第二个示例中,您实际上复制了
    $value
    。在第一个示例中,您将指针传递给
    $add
    $value
    。因此,脚本在第二个函数中消耗了更多内存

    不建议使用闭包吗

    我想这是一个基于观点和任务的问题。大多数开发人员更喜欢干净的代码,而不是几个字节。但有些项目的负载非常高,因此管理者要求保存每个字节

    在我的项目中,我试图维护最简洁、可读和可维护的代码。因此,我更喜欢
    lambdas
    ,而不是
    closures
    。不是因为优化,而是为了使我的函数独立于范围外的变量


    并使用其他手段优化项目:缓存、数据库、体系结构。因为试图节省这些微不足道的字节,你可能会挫败整个项目。

    你最好问问PHP开发人员。。。可能与第二个参数的注入方式有关。顺便说一句:两个例子都是闭包…@LarsStegelitz,第一个不是匿名函数,第二个不是闭包吗?如果不是,那么我不完全理解什么是闭包:/。闭包是一个匿名函数。。。这只是另一个术语@拉尔斯泰格里茨嗯。。。所以我很困惑。阅读了其他文章,描述了不同的事情:,引用了一个例子:“不是所有的闭包都是lambda,也不是所有的lambda都是闭包。”术语“闭包”和“匿名函数”通常用于同一件事。严格地说,它们是不一样的。闭包是函数及其环境的组合。在这种情况下,“use”关键字在该环境中定义了一个变量,而该变量在外部是不可见的。OTOH,你可以说第一个例子也是一个闭包,只是有一个空的环境。这无法解释为什么内存使用量增加了一倍,指针副本不需要大约400字节。