在大多数其他面向对象的语言中。牺牲每个函数接收一个对象的单个关联数组,而不是枚举方法签名中的每个签名将是一种牺牲。但是,为什么在这两种语言的大多数流行框架中都可以接受并常用它来做到这一点?
除了希望获得简洁的方法签名之外,还有其他理由吗?
我确实看到了一个好处-当添加新的可选参数时,API可以保持不变。但是Javascript和PHP已经在其方法签名中允许使用可选参数。如果有的话,似乎Java或另一种OO语言将从中受益更多……但是我很少看到这种模式。
是什么赋予了?
最佳答案
主要原因是那些特定的语言根本不支持针对同一函数名称使用多种调用约定。 IE。您不能执行以下操作:
public function someFunc(SomeClass $some);
public function someFunc(AnotherClass $another);
public function someFunc(SomeClass $some, AnotherClass $another);
因此,您必须找到另一种创建更简单的方法来传递变量的方法,在PHP中,我们以
someFunc(array('some'=>$some, 'another'=>$another))
结尾,因为这是唯一方便的方法。在JavaScript中,我们最终使用了对象,它还不错:someFunc({some: something, another: anotherthing})