在我正在研究的PHP Web应用程序中,我看到以两种可能的方式定义函数.
方法1:
function myfunc($arg1, $arg2, $arg3)
Run Code Online (Sandbox Code Playgroud)
方法2:
// where $array_params has the structure array('arg1'=>$val1, 'arg2'=>$val2, 'arg3'=>$val3)
function myfunc($array_params)
Run Code Online (Sandbox Code Playgroud)
什么时候应该使用一种方法而不是另一种 似乎如果系统要求不断变化,因此myfunc的参数数量不断变化,方法1可能需要大量维护.
Joh*_*ker 29
如果系统经常变化以至于使用索引阵列是最佳解决方案,我会说这是您最不担心的问题.:-)
一般来说,函数/方法不应该使用太多的参数(5加或减2是最大值),我会说你应该坚持使用命名(和理想的类型提示)参数.(如果存在大量可选数据,则索引的参数数组才有意义 - 一个很好的示例是配置信息.)
正如@Pekka所说,传递一系列论点也很难记录下来,因此对于其他人/你自己来说,要保持这种状态.
更新ETTE ...
顺便提一下,经常提到的" Code Complete"这本书很详细地研究了这些问题 - 这是我非常推荐的一本很棒的书.
Pek*_*ica 17
使用params数组(在其他语言中代替所谓的"命名参数")很棒 - 我喜欢自己使用它 - 但它有一个非常大的缺点:参数不能使用标准的phpDoc表示法记录,并且因此,当您键入函数或方法的名称时,IDE将无法提供提示.
Bry*_* M. 13
当我想要覆盖函数中的一组默认值时,我发现使用可选的参数数组非常有用.在构造具有许多不同配置选项的对象或者只是用于信息的哑容器时,它可能很有用.这是我主要从Ruby世界中学到的东西.
例如,如果我想在我的网页中为视频配置容器:
function buildVideoPlayer($file, $options = array())
{
$defaults = array(
'showAds' => true,
'allowFullScreen' = true,
'showPlaybar' = true
);
$config = array_merge($defaults, $options);
if ($config['showAds']) { .. }
}
$this->buildVideoPlayer($url, array('showAds' => false));
Run Code Online (Sandbox Code Playgroud)
请注意,$ options的初始值是一个空数组,因此提供它是可选的.
此外,使用此方法我们知道$ options将始终是一个数组,并且我们知道这些键具有默认值,因此我们不需要经常检查is_array()或isset()引用参数.
| 归档时间: |
|
| 查看次数: |
26601 次 |
| 最近记录: |