【发布时间】:2016-06-28 21:52:11
【问题描述】:
所以我有一个名为 vendorGet() 的函数,它包含一组供应商名称及其徽标。我在另一个数组中调用 vendorGet() 函数并传递一个字符串参数来告诉它从供应商数组中输出哪个供应商。这样做会导致 PHP 脚本在每次调用函数时创建这个数组,还是在函数中创建一次并每次都引用自己?
希望这是有道理的。如果有什么我可以澄清的,请告诉我。 这是一些(缩短和简化的)代码作为参考,
// Vendor Fetcher
function vendorGet($data)
{
$vendor = array(
'foo' => array(
'name' => 'Foo Products',
'image' => (VENDOR_IMG . 'foo/foo-logo.png'),
),
'bar' => array( // ABT
'name' => 'Bar Inc.',
'image' => (VENDOR_IMG . 'bar/bar-logo.png'),
),
);
return $vendor[$data];
}
// Array calling vendorGet() function
$catalogue = array(
'chapter-1' => array(
'vendors' => array(
1 => vendorGet('foo'),
2 => vendorGet('bar'),
),
),
);
【问题讨论】:
-
php.net/manual/en/functions.arguments.php
PHP supports passing arguments by value (the default), ...这意味着传递一个大数组将复制该数组。 -
$vendor将在每次vendorGet()返回时被删除。该函数每次调用都会重新创建$vendor;只有返回子数组在函数调用之间继续存在。为避免这种情况,请将vendorGet()放入具有创建$vendor[]的构造函数的类中。当您创建该类的实例时,$vendor[]将存在,$vendorGet()可以在每次调用时引用它。 -
@JuanTomas 啊好的,谢谢你的建议!
-
static $vendor = array(...只会创建一次。 -
@RyanVincent 酷,我会试试看。你能解释一下为什么会发生这种情况,这是好的还是坏的做法?