Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数编程实践_Php_Class_Function_Methodology - Fatal编程技术网

Php 函数编程实践

Php 函数编程实践,php,class,function,methodology,Php,Class,Function,Methodology,我有一个函数,它返回一个整数,但是我想对它进行扩展,向其中添加一个新参数。但是,使用此参数时,函数必须返回一个数组 使用基于参数返回数组或整数的函数是一种不好的做法吗 如果是,我如何解决这个问题 我认为仅仅复制粘贴整个函数4-5行是不好的做法。在我看来,这是不好的做法,因为它可能会导致使用问题,因为您并不总是知道您从函数中获得的是int还是数组 我的建议 始终返回一个数组(即使它是一个项目长度),并具有更通用的函数,易于处理。如果可能,我会从一个函数中调用另一个函数 function get

我有一个函数,它返回一个整数,但是我想对它进行扩展,向其中添加一个新参数。但是,使用此参数时,函数必须返回一个数组

  • 使用基于参数返回数组或整数的函数是一种不好的做法吗
  • 如果是,我如何解决这个问题

我认为仅仅复制粘贴整个函数4-5行是不好的做法。

在我看来,这是不好的做法,因为它可能会导致使用问题,因为您并不总是知道您从函数中获得的是int还是数组

我的建议
始终返回一个数组(即使它是一个项目长度),并具有更通用的函数,易于处理。

如果可能,我会从一个函数中调用另一个函数

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;
}
对于您心目中的函数,可能不可能做到这一点,但这可能是一个很好的选择


另外,由于函数之间相互关联,我将把它们作为类方法来编写,以便将它们“分组”在一起

用户
为例;我可能需要一个函数来获取单个用户,另一个函数来获取多个用户。在类中收集这些方法是有意义的:

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);
 }

我反对以数组的形式返回东西如果你的函数修改了多个值,那么你编写的函数可能不是正确的函数,可能你需要为同一个值使用两个函数。。这段代码干净且可维护的一个主要原因是,明天一个新人不必去想会发生什么,他已经说过,在某些情况下,你必须修改多个参数。在这种情况下,调用一个函数,看看这个方法做了什么,并返回正确的值,而另一个函数则通过引用传递它并编辑它

下面是一个通过引用传递的示例

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here
?>

您可以在此列出一些原则:

  • 使函数参数具有一种含义(函数最好为零参数,尽可能避免更多)
  • 使函数只做一件事
  • 不要重复你自己
  • 我认为这三点都是正确的。你的问题听起来像是3人之间的交易。二,。或1。。我认为你们不应该互相交易

    您还没有分享关于您试图通过该函数实现什么的内容,因此完全抽象,我可以从中看到以下路径:

  • 您正面临一个设计问题。重新设计和重构代码

  • 嗯,听起来有点像聪明的谈话,但老实说,您可能没有正确地使用迭代器(foreach),或者您正在开始创建一个“一个函数完成所有任务”——您不应该创建的函数。这最终会重复代码。

    问得好。这些函数是为了错误处理,而不是典型的情况。而且它很繁重,所以不能遵循可建议的论点。@hakre是真的,但我100%确定我看到一个函数至少返回一次int或数组,只是我不能指出它。只有那些存在并不意味着推荐它。我知道这样的函数确实存在,但OP正在寻找一些指南,我只想指出,这可能是不可取的。@hakre指出,我将改变我的答案(现在我想起来了,不可维护的函数是一种不好的做法)。你说的“和函数理想的零参数”是什么意思?@Marvo:只是函数应该有尽可能少的参数,理想情况下没有-当然,这并不总是可能的。所以“理想”是这样的。虽然我听过将参数数量保持在较低水平或某个限制之下以生成可维护代码的规则,但我从未听说过理想数量是零参数。函数,几乎从定义上来说,需要一些参数。这正是问题的关键。理想情况下,函数的参数为零,如果您查看类,则更常见的情况是这种情况。在过程编程中,也可能是这样,但是零参数要实现要困难得多,实际上,零参数只是理想的情况,实际上我们需要有尽可能多的参数。只是说,为了干净的代码,把数字保持在低水平。