CakePHP大量使用关联数组将大量参数传递给函数.我还没有真正在PHP之外看过这种技术,并且从未看到它在Cake使用它的程度上使用过.我真的很喜欢这种方法,因为看起来在你自己的代码的未来版本中处理新参数会更容易,并且它比简单的一长串参数更具可读性.
举个例子...
function myFunc($params = array('name' => 'rob', 'count' => 5, 'anArray' => array('A string', 5, myObject)))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想这与使用argc/argv类似,但更容易阅读.有没有人有这个方法的优缺点列表,或者知道有关这方面的最佳实践的人?我试过谷歌搜索它,但"关联参数数组"几乎带来了所有编写的编程文章.
此外,是否有一个通过这种方式传递参数的术语?
使用命名参数的缺点是使用PHPDoc记录参数.许多编辑器/ IDE提供"自动"文档,可以解析您的代码并生成通用docblock.
例如
function foo(array $bar, SomeClass $stuff) { returns $magic; }
Run Code Online (Sandbox Code Playgroud)
会产生:
/**
* foo
*
* @param array $bar
* @param SomeClass $stuff
* @return mixed
*/
function foo(array $bar, SomeClass $stuff) { returns $magic; }
Run Code Online (Sandbox Code Playgroud)
如果将所有参数放在$ params数组中,它只会看起来像
/**
* foo
*
* @param array $params
* @return mixed
*/
Run Code Online (Sandbox Code Playgroud)
它还会给开发人员增加额外的负担,因为他们必须为每个参数键入额外的代码.我建议使用这两种方法的混合.
例如,如果您有一个返回HTML文本输入元素的函数,则可以使用以下方法签名:
/**
* formText
*
* @param string $name name of text element
* @param string $value value of text element
* @param array $options additional options for text element
* @return string
*/
function formText($name, $value, $options = array());
Run Code Online (Sandbox Code Playgroud)
因此,您可以轻松地将最常见的值传递给函数.
$this->formText('foo', 'Default...');
Run Code Online (Sandbox Code Playgroud)
如果你需要额外的,不太常见的参数,你可以使用方便的命名参数语法:
$this->formText('foo', 'Default...', array(
'class' => 'bold highlighted'
));
Run Code Online (Sandbox Code Playgroud)
否则,只使用通用的$ params数组,你必须键入:
$this->formText(array(
'name' => 'foo',
'value' => 'Default...'
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |