php - 为什么我们应该总是从函数返回值?

标签 php function return

我不是一个编程高手,但很多次听程序员说我们应该总是从函数返回值。我想知道原因。

最佳答案

一个函数不需要返回任何东西...如果你看一下 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/

相关文章:

php - 如何设置多个重力形式值而不需要为每个重力形式值执行新的数据库查询?

c++ - 如何从函数返回 char 数组?

php - 为什么 PEAR 无法在我的 PHP Windows 安装上运行?

php - 如何实现 Reddit 投票算法?

php - 用php替换文件中的字符串

c - 为什么return语句不结束c中的递归函数?

python - 函数不返回值(Python 2.7)

澄清调用内核中函数的需要

sql - 返回表与重复查询的函数

javascript Canvas 功能在没有警报的情况下无法正常工作