【发布时间】:2011-11-01 08:56:22
【问题描述】:
我有一个返回 整数 的函数,但是我想扩展它以添加一个新参数。然而,有了这个参数,函数必须返回一个 array。
- 有一个基于参数返回数组或整数的函数是不好的做法吗?
- 如果是这样,我该如何解决?
我认为将整个函数复制粘贴 4-5 行也是一种不好的做法。
【问题讨论】:
-
好问题。也许适合程序员。
标签: php class function methodology
我有一个返回 整数 的函数,但是我想扩展它以添加一个新参数。然而,有了这个参数,函数必须返回一个 array。
我认为将整个函数复制粘贴 4-5 行也是一种不好的做法。
【问题讨论】:
标签: php class function methodology
如果可能的话,我会从另一个函数中调用一个函数。
function getSingle($arg)
{
// Do whatever it is your function should do...
return 1;
}
function getMultiple($args)
{
$out = array();
foreach ($args as $arg) {
$out[] = getSingle($arg);
}
return $out;
}
对于您心目中的功能,可能无法做到这一点,但它可能是一个不错的选择。
作为一个额外的说明,由于函数是相互关联的,我会将它们写成类方法来将它们“组合”在一起。
以Users 为例;我可能需要一个函数来获取单个用户,而另一个函数来获取多个用户。在一个类中收集这些方法是有意义的:
class Users
{
public function getUser($id){}
public function getUsers(array $id = null){}
}
【讨论】:
在 PHP 中,我会说“一个函数一个输出类型”。 (除了值 FALSE 在 PHP 中具有特殊含义)。如果 PHP 支持重载,那可能会有所不同,但事实并非如此。但这里有一个问题,为什么不简单地将这两个函数都包装起来呢?
function my_wrapped_function($param1, array $param2)
{
return $param1 * count($param2);
}
function get_array_from_wrapped( $param1, array $param2 )
{
return array( $param1, my_wrapped_function($param1, $param2));
}
function get_int_from_wrapped( $param1, array $param2 )
{
return my_wrapped_function($param1, $param2);
}
【讨论】:
在我看来,这是一种不好的做法,因为它可能会导致使用它时出现问题,因为您并不总是知道从函数中获取的是 int 还是数组。
总是返回一个数组(即使它是一个项目长),并且有一个更通用的函数,很容易处理。
【讨论】:
如果您的函数修改多个值,我反对将内容作为数组返回,那么您编写的函数可能不是正确的,您可能需要两个函数来实现相同的.. 一个主要的这个干净和可维护的代码的原因,明天一个新人不需要去想知道他会发生什么已经说过在这种情况下你必须修改多个参数的情况下打电话看看方法做了什么并返回正确的值,另一个值通过引用传递它并编辑它。
这里是一个引用传递的例子..
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
【讨论】:
你在这里说出一些原则:
我认为这三个都是有效的。您的问题听起来像是 3. 和 2. 或 1. 之间的交易。我认为您不应该将它们相互交易。
您没有分享太多关于您尝试使用该功能实现的目标,因此完全抽象,我可以看到以下路径:
嗯,听起来有点像在说聪明话,但老实说,您可能没有正确使用迭代器(foreach),或者您开始创建一个“一个函数完成所有任务”的函数——这是您不应该的。这最终会重复代码。
【讨论】: