我不是一个编程高手,但很多次听程序员说我们应该总是从函数返回值。我想知道原因。
最佳答案
一个函数不需要返回任何东西...如果你看一下 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);
}
后者什么都不返回,好吧,它返回一个空值。 main 函数确实返回了一些东西: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
在许多情况下,通过引用传递被认为是有风险的,这就是为什么后一种方法通常被认为更好的原因。所以在很多情况下,函数不需要返回值,但它们会做同样的事情,因为它使代码整体更安全。
这可能就是为什么您认为函数必须总是返回值的原因。
关于php - 为什么我们应该总是从函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350585/