在阅读php代码时,我经常看到这个成语:
public function __construct($config)
{
    if (array_key_exists('options', $config)) {
       ...
    }
    if (array_key_exists('driver_options', $config)) {
        ...
    }
}这里我关注的是参数的使用方式。如果我在lisp中,我会这样做:
(defun ct (&key options driver_options) 
       (do-something-with-option-and-driver_option))但是因为我是在PHP中,所以我宁愿有一个构造函数,它接受一个参数列表,如果不需要,就让它们为null。
那么你们觉得在other中使用一个数组作为参数来做一些初始化之类的事情怎么样?
在其他回答中,你必须考虑到函数用户和API设计者的观点。
发布于 2010-06-07 23:21:48
就我个人而言,我不喜欢这个成语。如果需要的话,我更喜欢有一个很长的参数列表。
问题是,我不能通过查看函数签名来知道数组不能接受的元素。最重要的是,实现几乎不会检查是否有任何键无法识别,所以如果我错误地拼写了数组键,我就不会收到任何警告。
更好的替代方法是传递一个配置对象。至少,IDE可以提供有关可用配置对象的提示,并且可以将计算出的缺少选项的默认值从您向配置对象中的getter显示的构造函数中移出。一种显而易见的替代方法是为几个配置选项提供setter;尽管这对每个选项所需的setter没有帮助,但不能提供默认值。
https://stackoverflow.com/questions/2990674
复制相似问题