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