匿名函数比普通函数更昂贵?

时间:2012-03-15 15:27:14

标签: php

看来anon函数是对象,所以我猜这个函数是该对象的一个​​方法。这是否意味着他们比正常的功能需要更多的资源?

2 个答案:

答案 0 :(得分:3)

在什么方面占用更多资源?记忆?还是硬盘空间?

内存,不,php加载了所有内容,只要你包含一个文件,就会读取整个文件。因此,如果函数充当方法中的变量,那么它将自动执行,这可能会占用更多的内存空间。虽然定义为函数的函数在被调用之前不会被执行。因此,如果您有一个函数充当未使用的变量(声明且从未使用过)。然后是的,它会占用更多的内存。

硬盘空间:占用的金额相同。

答案 1 :(得分:0)

我对相对运行时间进行了一次小测试。该脚本如下:

<?php
// long execution time required
ignore_user_abort(1);
set_time_limit(0);

// some presumingly costly function
function mathematics() {
  $c = 0;
  for ($i = 0; $i < 1000; $i++) $c += rand(0, 1000);
  return $c / 1000;
}

$lambda = function() {
  // same as mathematics()
};

// Executing normal function
for ($i = 0; $i < 50000; $i++) mathematics();

// Now onto lambda function
for ($i = 0; $i < 50000; $i++) $lambda();
?>

使用xdebug进行概要分析并将缓存提供给cachegrind会产生:

mathematics(): 31,804,288
closure:       31,719,438

我认为可以安全地假设跑步所需的时间差异是可以忽略不计的。