使用PHP将多个变量传递给函数的最佳实践是什么
发布时间:2020-12-13 22:37:57 所属栏目:PHP教程 来源:网络整理
导读:我有一个带5个参数的函数,随着应用程序的增长,我们需要添加更多的参数,这些参数最终有9个参数,其中4个参数有默认值. 我想知道传递这样的参数或使用数组更好吗? 我更喜欢这样 fun(array( 'par1' = 'x','par2' = 'y',..... ) ) 绝缘 func($par1,$par2,$par3,.
我有一个带5个参数的函数,随着应用程序的增长,我们需要添加更多的参数,这些参数最终有9个参数,其中4个参数有默认值.
我想知道传递这样的参数或使用数组更好吗? 我更喜欢这样 fun(array( 'par1' => 'x','par2' => 'y',..... ) ) 绝缘 func($par1,$par2,$par3,...); 你怎么看?
在很大程度上取决于用例.
但是这里有一些解决这个问题的方法. 固定订单 如果订单有些修复而你永远不需要改变它,那么: <?php function fn($a1,$a2,$a3,$a4,$a5,$a6 = null,$a7 = "foo",$a8 = "bar",array $a9 = array()) {} 优点 >自我记录 缺点 >固定订单 排列 另一方面,如果订单总是有些不同,请使用数组thingy. <?php function fn($a1,array $optional = array()) {} fn("","",array("arg9" => false)); 优点 >易于使用 缺点 >不是自我记录 参数对象 参数对象当然也是一种有效的解决方案,但处理起来却不切实际: <?php class Args { public $arg5 = "foo"; public $arg6 = "bar"; public $arg7 = null; public $arg8 = array(); public $arg9 = true; } function fn($arg1,$arg2,$arg3,$arg4,$arg5,Args $optional = null) {} // Now comes the impractical part. $optional = new Args(); $optional->arg9 = false; fn("",$optional); 优点 >自我记录 缺点 >非常不切实际 数组到参数对象 你可以混合两种方法: <?php class Args { public $arg5 = "foo"; public $arg6 = "bar"; public $arg7 = null; public $arg8 = array(); public $arg9 = true; public __construct($args) { foreach ($args as $property => $value) { $this->"set{$property}"($value); } } public function setArg5($value) { if (is_string($value) === false) { throw new InvalidArgumentException; } $this->arg5 = $value; } // and so on ... } function fn($arg1,array $optional = null) { if (isset($optional)) { $optional = new Args($optional); } // ... } fn("",array("arg9" => false)); 优点 >简单验证 缺点 >仍然无法将其记录为固定的args方法 Variadics PHP 5.6中有一个你可能会觉得有用的新功能,variadics: <?php function fn($a1,...$optional) {} 优点 >非常快 缺点 >不容易记录 命名参数 我们将来可能会看到named parameters. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |