一系列功能

时间:2011-05-08 18:20:04

标签: php arrays class function

我想知道如果我将一组函数存储到像这样的数组

中是否可以
$f = array(
   'functions1' =>
     array(
      'somefunction',
       array($this, 'someclassfunction'),
       array($this, 'someotherfunction'),
     ),
   'functions2' =>
     array(
      'somefunction',
       array($this, 'someclassfunction'),
       array($this, 'someotherfunction'),
     ),

   ...

);

稍后再打电话给他们:

foreach($f as $key => $func)
  call_user_func($func)...

如果我做print_r($f)我会得到一个包含所有这些函数的大量变量的大数组。这会以某种方式影响性能吗?

3 个答案:

答案 0 :(得分:2)

如果$f真的很大,它会消耗你的RAM。 print_r实际上也打印了对象属性。我可以看到你多次使用$ this,这可能是你的输出很大的原因。 PHP文档如下:

  

print_r(),var_dump()和var_export()   还将显示受保护和私密   PHP 5的对象属性。   静态类成员不会   所示。

$这只在内存中表示一次,即性能开销很低。

call_user_func本身并不像直接调用函数那么快。

答案 1 :(得分:2)

你可以做到。但对于其他试图完成代码的人来说,它并不是特别易懂。如果您需要将参数传递给这些函数,并处理返回值(以及潜在的错误条件),那么它也会更加笨拙。由于这些原因,我不推荐它。

答案 2 :(得分:2)

一般来说很好。它可能取决于阵列的填充方式 - 如果它是硬编码的,那么在实践中你不能使它“太大”。如果它是动态生成的,您可能想要检查它可以获得多大,如果大小成为问题,请切换到增量处理方法。

通过在脚本中调用memory_get_usage两次(分配数组之前和之后)并计算差异,可以很好地估计数组占用的内存量。

当然,我正在讨论这种方法的可行性,而不是它的可行性,因为您的问题没有询问或提供任何相关信息。