2012-09-10 153 views

回答

5

函数不需要返回任何东西......如果你看看C(++)功能,其中许多人没有(当然,不明确):

void nonReturningFunction(const int *someParam); 
int main() 
{ 
    int i = 12; 
    nonReturningFunction(&i); 
    return 0; 
} 
void nonReturningFunction(const int *someParam) 
{ 
    printf("I print the value of a parameter: %d",someParam); 
} 

后者没有任何返回,它返回一个void。主函数确实返回了一些内容:0,这通常是系统发出的一个信号,让它知道程序已完成,并且完成的很好。

同样的逻辑适用于PHP,或任何其它编程语言。一些函数的返回值是相关的,另一个函数可能不需要返回任何东西。一般来说,函数会返回值,因为它们与程序的流程相关。

参加培训课程,例如:

<?php 
    class Foo 
    { 
     private $foo,$bar; 
     public function __construct() 
     { 
      $this->foo = 'bar'; 
     } 
     public function getFoo() 
     { 
      return $this->foo;//<-- getter for private variable 
     } 
     public function getBar() 
     { 
      return $this->foo;//<-- getter for private variable 
     } 
     public function setBar($val = null) 
     { 
      $this->bar = $val; 
      return $this;//<-- return instance for fluent interfacing 
     } 
     public function setFoo($val = null) 
     { 
      $this->foo = $val; 
      return $this; 
     } 
    } 
    $f = new Foo(); 
    $f->setFoo('foo')->setBar('bar');//<-- fluent interface 
    echo $f->getFoo(); 
?> 

如果setter函数没有返回任何东西,你必须写:

$f->setFoo('foo'); 
$f->setBar('Bar'); 

因此,在这种情况下,返回值是相关。在那里他们无关又如:

function manipulateArray(array &$arr)//<-- pass by reference 
{ 
    sort($arr); 
} 
$arr = range('Z','A'); 
manipulateArray($arr); 
var_dump($arr);//array is sorted 

,而不是:由参考

function manipulateArray(array $arr)//<-- pass by copy 
{ 
    sort($arr); 
    return $arr; 
} 
$arr = range('Z','A'); 
manipulateArray($arr); 
var_dump($arr);//array is not sorted! 
$arr = manipulateArray($arr);//<-- requires reassign 

传递被认为在许多情况下,有风险的,这就是为什么后者的做法被普遍认为是更好的。因此,在很多情况下,这些函数不需要返回值,但它们都是一样的,因为它使代码更安全。
这可能是为什么你的印象是功能必须始终返回值之下。

7

这样做是为了使函数有一个确定的终点。这主要是为了提高可读性并帮助未来的程序员理解你想要做的事情。

不应该假定函数返回什么。

5

有这么多的理由......

这对你的架构更好的:一个函数需要的参数,与他们合作,并返回预期的结果。通过这种方式,您可以重新使用它并安排您的代码。

这对unit testing更好,你可以很容易地检查你的函数是否返回预期结果。

3

一般来说,在计算机编程中,函数是一个可重用的代码单元,它需要一些输入(不包括任何内容)并返回一个值。

一些语言与被称为过程的函数具有相似的构造,这些是可重用的代码片段,需要一些输入(不包括任何内容)并执行一些活动但不返回结果。

然而,有些语言可能没有把后者作为一种语法结构,我可以使用函数来实现过程。所以你在这里得到了忽略结果的功能。另外一些语言可能没有要求实际强制代码从函数返回某些东西(即它们使用函数实现过程)。

所以如果你只有后者作为你的选择,那么你可以像@lix一样争辩说,从函数返回事情是一个好习惯。主要原因是虽然函数可以像过程一样使用 - 调用者可以像函数那样调用它,并期望与结果一起工作。请记住,测试代码是一个主要用例,它可能是遵循此惯例的唯一原因。

就我个人而言,我认为约定就是答案。尽你所能,尽力做到最好,如果你需要分歧 - 找到方法让用户知道。

2

另外:灵活性。从函数内部考虑echo ing和return。例如,从函数中返回truefalse,您可以按照需要以多种方式修改视图中显示的内容。有一个字符串回声不会给你这种灵活性。

7

这是旧编程的遗产。在像Fortran这样的老式语言中,你总是必须返回一些类型,例如int,float,bool等。由于C可以返回一个“void”类型,并且这是大多数C函数中的默认值,如果你没有指定返回语句,最后返回void。例如在Java中,您必须指定返回类型,然后返回该类型。如果你不想返回任何东西,你可以使用“无效”类型:

//This works 
public void boo() { 
    return; 
} 


//This gets you an error 
public int boo() { 
    return; 
} 

//This gets you an error too, because you must specify a type for any function in Java 
public boo() { 
    return; 
} 

所以它更像是LIX说,如果你有一些与回报,你怎么做。在大多数功能程序中,您的功能可以返回数据,或者真/假标记成功或失败。在许多系统中,一个函数可以返回一个int,指示成功或失败,如'1'或'-1'。 Unix shell程序使用这个。

在PHP你并不需要返回任何其他语言,但会在后台PHP还附加一个“无效”类型返回值的函数,你只是没有明确地写出来。

希望这有助于

+0

这将解释所有返回0而不是我最近看到的无效。 – Steinin

0

一些早期的语言有过程和函数。程序没有任何返回(他们只是做了一些事情)。函数返回的东西。我想有人认为这是不必要的,因为一个函数可能只是无效的(在C中使用)。我刚写了一个快速函数来将数据存储在数据库中。由于数据在多个层次被过滤,所以错误的几率可以忽略不计,但是,我在函数中包含了一个警报,它会在错误中回显,因此不需要返回错误警报。 (这是一个内部网站,不会公开使用),因此让函数返回任何内容都是不必要的。

由于问题是为什么我们应该总是返回一个值,这不是为什么有时候返回一个值有时是好的,但是有什么理由要求我们应该总是返回一个值,并且没有任何正当的理由总是返回来自函数的值。

相关问题