我想知道如果我将一组函数存储到像这样的数组
中是否可以$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)
我会得到一个包含所有这些函数的大量变量的大数组。这会以某种方式影响性能吗?
答案 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
两次(分配数组之前和之后)并计算差异,可以很好地估计数组占用的内存量。
当然,我正在讨论这种方法的可行性,而不是它的可行性,因为您的问题没有询问或提供任何相关信息。