Php 为什么我们总是从函数返回值?
我不是一个编程高手,但我听过很多程序员说,我们应该总是从函数返回值。我想知道原因。这样做是为了确定函数的结束点。它主要是为了提高可读性,并帮助未来的程序员理解您试图做的事情Php 为什么我们总是从函数返回值?,php,function,return,Php,Function,Return,我不是一个编程高手,但我听过很多程序员说,我们应该总是从函数返回值。我想知道原因。这样做是为了确定函数的结束点。它主要是为了提高可读性,并帮助未来的程序员理解您试图做的事情 对于函数返回的内容不应该有任何假设 原因有很多 这对您的体系结构更好:函数接受参数,使用它们并返回预期结果。通过这种方式,您可以重用它并整理代码 更好的是,您可以很容易地检查函数是否返回预期结果。一般来说,在计算机编程中,函数是一个可重用的代码单元,它接受一些输入(不包括任何内容)并返回一个值 有些语言具有与称为过程的函数类
对于函数返回的内容不应该有任何假设 原因有很多 这对您的体系结构更好:函数接受参数,使用它们并返回预期结果。通过这种方式,您可以重用它并整理代码
更好的是,您可以很容易地检查函数是否返回预期结果。一般来说,在计算机编程中,函数是一个可重用的代码单元,它接受一些输入(不包括任何内容)并返回一个值 有些语言具有与称为过程的函数类似的结构,这些是可重用的代码片段,它们接受一些输入(不包括任何内容)并执行一些活动,但不返回结果 然而,有些语言可能没有后者作为语法结构,mey使用函数来实现过程。在这里,你可以得到忽略结果的函数。另外,有些语言可能不要求实际强制代码从函数返回某些内容(即,它们使用函数实现过程) 因此,如果您只有后者作为您的选择,那么您可以像@lix一样争辩说,从函数返回内容是一种很好的做法。主要原因是,尽管函数可以像过程一样使用,但调用方可以像调用函数一样调用它,并期望处理结果。请记住,测试代码是一个主要用例,它可能是遵循此约定的唯一原因
我个人认为传统是答案。做对你最有用的事情,但尽量总是做同样的事情,如果你需要分歧,找到让用户知道的方法 还有:灵活性。从函数内部考虑<代码>回声<代码> ING VS <代码>返回< /代码> ING。例如,通过函数返回的
true
或false
,您可以根据需要以多种方式修改视图中的显示方式。回显字符串并没有给您这种灵活性。这是旧编程的传统。在Fortran等较旧的语言中,您总是必须返回类型为int、float、bool等的内容。因为C可以返回“void”类型,这是大多数C函数中的默认值。如果不指定return语句,它将在末尾返回void。例如,在Java中,您必须指定一个返回类型,然后使用该类型返回。如果不想返回任何内容,请使用“void”类型:
//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”。unixshell程序使用这个
在其他语言(如PHP)中,您不需要返回任何内容,但在后台PHP仍然将“void”类型作为返回值附加到您的函数中,您不必显式地编写它
希望这有帮助函数不需要返回任何内容。。。如果您查看C(++)函数,其中许多函数没有(好的,不是显式的): 后者什么也不返回,它返回一个空。主函数确实会返回一些信息:
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();
?>
所以在这种情况下,返回值是相关的。另一个不相关的例子:
function manipulateArray(array &$arr)//<-- pass by reference
{
sort($arr);
}
$arr = range('Z','A');
manipulateArray($arr);
var_dump($arr);//array is sorted
函数操作array(array&$arr)//一些早期的语言有过程和函数。程序没有返回任何结果(他们只是做了一些事情)。函数返回了一些东西。我猜有人认为这两个函数都没有必要,因为函数可能只是void(如C中所使用的)。我刚刚编写了一个快速函数来在数据库中存储数据。由于数据在多个级别进行了过滤,因此出错的几率可以忽略不计,尽管如此,我在函数中包含了一个警报,它会在出错时发出回声,因此即使返回错误警报也没有必要。(这是一个内部站点,不会供公众使用)因此让函数返回任何内容是完全不必要的
既然问题是为什么我们应该总是返回一个值,那就不是为什么有时返回一个值是好的,而是有什么理由要求我们总是返回一个值,并且没有任何有效的理由总是从函数返回一个值。I它总是取决于特定的情况。例如,一个静态方法,应该总是返回一些东西,因为它们不能修改对象;但是,如果您将对象的引用传递给该方法,则无论如何都可以这样做;比如一个引用变量(比如C++上的指针),或者仅仅是一个对象(在PHP中作为隐式引用传递)。在后面的实践中,它不是一个好的方法,因为如果您使用一个方法来接收引用并修改定义该方法的同一个类,为什么不使该方法成为非静态的呢?。如果您希望有一个可由各种类(可能是派生类或抽象类)重用的方法,则后者并不总是正确的。现在对于IDE来说,声明变量返回的类型会更好,因此解释器或编译器会在编译时而不是运行时捕获很多错误。我认为,大多数语言并没有为你的qu设定标准
$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