传递/返回值的最佳方法

时间:2009-08-07 21:59:56

标签: php

我问这个问题的原因是因为我已经获得了我的第一个真实的(是的,一个有偿的办公室工作 - 没有更多的志愿服务!)大约两个月前的Web开发工作。我在计算机信息系统(Web开发和编程)方面有几个同事。但是,正如你们许多人所知,你在大学里学到的东西以及你们在工作现场所需要的东西可能会有很大差异。我肯定从我的工作中学习 - 我重新创建了我们在MVC架构中从头开始使用的整个框架 - 第一次做与设计模式相关的任何事情。

我想知道你会推荐什么作为在OO PHP中传递/返回值的最佳方法?现在我没有实现任何类型的标准,但我想在框架的大小增加之前创建一个标准。当多个值需要返回时,我返回数组,有时传递数组或有多个参数。数组是最好的方法还是有更有效的方法,比如json?我喜欢数组的想法,传递更多或更少的值,你只需要更改数组而不是函数定义本身。

谢谢大家,只是想成为更好的开发者。

编辑:对不起,我以为我接受了这个问题的答案。我的坏,非常,非常糟糕。

4 个答案:

答案 0 :(得分:5)

您经常需要多次返回值的情况?我无法想象经常这样。

我并不是指你返回某些期望的是某种类型的可枚举数据集合(即查询结果),但返回的数组没有其他的情况意思是只保留两个或更多的值。

PHP库本身使用的一种技术是引用参数,例如preg_match()。函数本身返回单个值,即布尔值,但可选地使用提供的第3个参数来存储匹配的数据。实质上,这是“第二回报值”。

绝对不要使用像JSON这样的数据交换格式。这些格式的目的是以预期的,可解析的方式在不同系统之间移动数据。在单个PHP执行中,您不需要它。

答案 1 :(得分:2)

您可以返回任何您想要的东西:单个值,数组或引用(取决于函数需要)。只是保持一致。

但请不要在内部使用JSON。它只会产生不必要的开销。

答案 2 :(得分:1)

我也使用数组来返回多个值,但在实践中它并不经常发生。如果是,则通常是合理的数据分组,例如从名为array('x'=>10,'y'=>10)的函数返回getCoordinates()。如果你发现自己正在进行大量处理并从许多函数中返回数组中的大量数据,那么可能需要进行一些重构才能将工作放到更小的单元中。

话虽如此,你提到:

  

我喜欢数组的想法,传递更多或更少的值,你只需要更改数组而不是函数定义本身。

在这方面,您可能感兴趣的另一种技术是使用具有可变数量参数的函数。声明一个没有参数的函数是完全可以接受的:

function stuff() {
    //do some stuff
}

但是用你关心的所有参数调用它:

$x = stuff($var1, $var2, $var3, $var4);

通过使用func_get_args()func_get_arg()(单数)和func_num_args(),您可以轻松找到/循环传递的所有参数。如果您没有考虑具体参数,例如sum()函数:

,则效果非常好
function sum()
{
    $out = 0;
    for($i = 0; $i < $c = func_num_args(); $i++) {
        $out += func_get_arg($i);
    }
    return $out;
}

//echoes 35
echo sum(10,10,15);

思考的食物,也许你会发现它很有用。

答案 3 :(得分:0)

我唯一要小心避免传递/返回键具有“特殊”含义的数组。例如:

<?php
// Bad. Don't pass around arrays with 'special' keys
$personArray = array("eyeColor"=>"blue", "height"=>198, "weight"=>103, ...); 

?>

使用像这样的数组的代码更难以重构和调试。这种类型的结构更好地表示为对象。

<?php

Interface Person {
    /**
     * @return string Color Name
     */
    public function getEyeColor();
    ...
}
?>

此界面提供消费代码可依赖的合约

除此之外,我想不出任何限制自己的理由。


注意:要清楚,关联数组非常适合列表数据。像:

<?php
// Good array
$usStates = array("AL"=>"ALABAMA", "AK"="ALASKA", ... );
?>