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

2024-04-12

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


函数不需要返回任何内容...如果您查看 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

在许多情况下,通过引用传递被认为是有风险的,这就是为什么后一种方法通常被认为更好的原因。因此,在许多情况下,函数不需要返回值,但它们的作用都是相同的,因为这使代码整体上更安全。
这可能就是为什么您认为函数必须always返回一个值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们应该总是从函数返回值? 的相关文章

  • Laravel项目部署到Cpanel时出现404错误如何解决?

    我正在尝试将我的 laravel Laravel Framework 7 28 3 部署到 Cpanel 但出现 404 错误 我将项目上传到 public html 修改了 index php 文件以指向正确的文件 如下所示 我认为ind
  • 针对 Woocommerce 中多个产品类别计数的 ajax 添加到购物车的 JS 警报

    在 Woocommerce 中 当达到特定产品类别的购物车中的产品的特定数量时 我尝试显示 JavaScript 甜蜜警报 并在达到二级类别的产品的特定数量时显示另一个警报 商品通过 AJAX 添加到购物车 这就是我想使用 JavaScri
  • 将数组值与同一数组中的其他值进行比较

    我想要实现的是 它将循环遍历数组 然后它会检查数组中的项目在三个点上是否相同 product id 尺寸值和颜色值 我想创建一个新数组 其中列出了项目 我唯一不想要的是重复的值 我希望重复的值如果在这三个点上相同 则数量将被计算在一起 就像
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima
  • 使用PHP获取http url参数而不自动解码

    我有一个像这样的网址 test php x hello world y 00h 00e 00l 00l 00o 当我将它写入文件时 file put contents x txt GET x gt hello world file put
  • 如何在文本字段内设置用户名和密码的标签?

    我的网站有一个登录表单 该登录表单有两个文本字段 用户名和密码 目前 我将标签 用户名 密码 放置在文本字段之前 但现在我想删除这两个标签并想在文本字段内显示文本 用户名 密码 当用户关注这些文本字段时 文本应该被删除 用户可以输入他想要的
  • 在php中声明一个对象数组

    如何将 php 中的对象列表声明为私有实例变量 在 Java 中 声明看起来像这样private ArrayList ls构造函数会有这个ls new ArrayList Thanks PHP 动态分配内存 而且它并不关心您在数组中存储什么
  • 如何传递数据到 Laravel 中查看?

    我将数据传递到我的刀片视图return View make blog posts 在我的刀片视图中 我正在尝试运行 foreach posts as post 我最终得到一个错误说 posts没有定义 我的问题是如何 posts数组被调用
  • 如何更新 mongodb PHP 中的所有文档

    我正在设置一个 cronjob 来更新该字段views 15关于集合中的所有文档query 这就是我所拥有的 应该有效 update array set gt array views 15 gt 0 db gt queries gt upd
  • 如何使用 zend paginate 而不加载数据库的所有结果

    所以我认为 zend paginate 工作的方式是 paginator Zend Paginator factory results paginator gt setItemCountPerPage itemCount paginator
  • 生成适用于不同时区和数据的计划

    我正在构建一个网络应用程序 指导人们早起 它会为用户生成七十天内的起床时间表 他们输入当前的上升时间和目标上升时间 然后 上升时间每周减少一定量 直到达到目标时间 用户必须登录网站并在预定时间 签到 考虑到当前登录用户的时区和夏令时 我对如
  • Facebook 页面插件无法运行 - 仅适用于一个网站

    我已将页面插件集成到我的目录中 ruhrlink de info php schluessel 150991 不起作用 其他的可以 当我在开发者网站 gt 页面插件中手动输入网址时 它在那里也不起作用 https www facebook
  • Opencart 2.2.0 启用按制造商搜索

    我正在使用 OC 2 2 0 并一直在努力解决以下问题 示例 我在标题搜索中输入西门子 然后单击 显示所有结果 我的搜索页面将显示所有结果 问题是 结果列表仅包含名称中包含西门子的产品 我需要的是展示all 搜索结果列表中属于该制造商的产品
  • MySQL 错误:无法创建表(errno:121“写入或更新时重复键”)

    我使用 MySQL Workbench 生成数据库的图表和代码 当我将代码放入 phpMyAdmin 时 它显示错误 1005 无法创建表wypozyczalnia wypozyczenie 错误号 121 写入或更新时密钥重复 哪里有问题
  • PHP mysql 土耳其语字符编码及比较

    我正在尝试通过 AJAX POST 从 MySql 数据库中过滤土耳其语姓名 英文字母单词列出一切正常 但是如果我发送 这是带点的字母 O 结果不仅是 还包括 O 和 另外我注意到 AJAX 帖子被发送 作为 C3 96 有人可以帮忙吗 请
  • 如何在 PHP 中访问数组的数组

    我正在研究 Flight api 我正在发送请求 从位置 到位置 从日期等 并且我收到以下数组格式的响应 Array AvailRequest gt Array Trip gt ONE Origin gt BLR Destination g
  • 与 ssh2_connect() 断开连接

    我已经使用 ssh2 连接ssh2 connect到服务器 但我没有看到任何方法在联机帮助页中 http php net ssh2 connect我应该如何结束连接 我不太喜欢在断开连接之前等待脚本结束 我可以用吗fclose 这听起来不对
  • Azure 上的 Laravel 应用程序:用户“azure”@“localhost”的访问被拒绝

    我正在将 Laravel 应用程序部署到 Azure Web 应用程序 Mysql 到目前为止我执行了以下步骤 1 在应用程序中激活Mysql 2 连接到 BitBucket 存储库并确保代码已同步 3 创建 env文件并设置数据库变量如下
  • PHP - Paypal API 表单和安全性 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在我的电子商务应用程序上使用标准 php paypal 表单进行付款 我注意到只有 firebug 的人可以在通过 立即付款 按钮发
  • 在 CakePHP 中访问 Configuration::read 控制器

    我的 CakePHP 应用程序有一个单独的配置文件 该文件加载在 bootstrap php 中 我的问题是 如何访问控制器中的配置变量 IE 如何在控制器中执行Configure read variable 函数 谢谢 在我的自定义配置文

随机推荐

  • 更改 a:hover 上 li 的背景图像

    我有一个菜单 div div
  • Heroku 上的 Django 部署问题与正在运行的应用程序的精确克隆:PUSH REJECTED ERROR

    我在 Heroku 上有一个 Django 应用程序 我在同一个 Heroku 帐户上设置了另一个应用程序 现在我想要第一个应用程序的另一个实例 我刚刚克隆了第一个应用程序并推送到新创建的应用程序中 但它不起作用 做的时候出现这个错误git
  • 编译时 -pthread 标志的含义

    在各种多线程 C 和 C 项目中 我看到了 pthread标志应用于编译和链接阶段 而其他人根本不使用它 只是通过 lpthread到链接阶段 不编译链接有没有危险 pthread标志 即什么 pthread实际上呢 我主要对 Linux
  • npm 安装后如何引用 Google Material-Design-Icons?

    所以做完之后npm install material design icons 我如何在我的React应用 所包括的方法here https google github io material design icons icon font
  • Laravel - 缓存 Eloquent 并频繁更新

    是否可以对经常修改的对象使用缓存 例如 假设我们有一个 BlogPost 对象 并且有一个经常更改的 num of views 列 以及其他列 是否可以更新缓存和数据库中的 num of views 字段 而不破坏缓存对象并重新创建它 我可
  • 如何通过 UIAutomation 处理“_APPNAME_想使用您当前的位置”警报

    好吧 这让我抓狂 我正在运行一个小型 CI 构建系统 我正在使用 UIAutomation 对我的应用程序进行 UI 测试 由于应用程序使用 CoreLocation 因此第一次启动应用程序时 我会收到一条小警报 要求我确认是否希望跟踪我的
  • Swig (Node.js) 中的 JSON.parse() ?

    当我陷入困境时 我试图从 Jade 切换到 Swig 被 Swig 的疯狂性能所吸引 作为我的 Express 模板引擎 我将一系列序列化 JSON 从 Express 发送到 Swig 并使用此循环检索 Swig 中的数据这里 ul if
  • node.js fs.writeFile 未完全覆盖文件

    我有一个长度为 X 的文件 它正在被长度为 X Y 的字符串覆盖 问题是 该文件仍然保留 X Y 过去的信息 因此它与第一个较长的文件一样长 所以这是我的测试输出 它让我适合 文件开头为 sOption1 String nOption2 2
  • SQL 错误:ORA-00913:值太多

    两个表在表名 列名 数据类型和大小方面相同 这些表位于不同的数据库中 但我习惯于 当前登录 hr 用户 insert into abc employees select from employees where employee id 10
  • Stripe 结账模式的事件或方法

    有什么方法可以在 Stripe Checkout 模式关闭时触发事件吗 Stripe 的模式关闭和响应传递之间存在大约 0 5 1 秒的延迟 那时 用户可能会点击离开页面等 为了解决这个问题 我们可以执行一些操作 例如禁用所有链接或在页面上
  • 如何在现有 Windows 应用程序中获得 ATL 支持

    我正在 Visual Studio 2012 中使用 Qt 5 3 1 构建一个应用程序 我还想使用一个硬件库 这需要我向项目添加一个简单的 ATL 对象 这可以通过使用 Visual Studio 向导来完成 该向导抱怨我的项目既不是 M
  • 如何确定函数特化的主要模板?

    函数模板专业化的主要模板通常是非常直观的 但是 我正在寻找正式的规则来理解更令人惊讶的情况 例如 template
  • com.google.gwt.user.client.rpc.InknownRemoteServiceException

    我的 GWT 应用程序有问题 我部署在 Jetty 服务器上并运行 但是当我执行服务器调用 GWT 服务器包上的类 时 服务器返回错误消息 消息是 7 0 6 http localhost zbapp zb app A31E1254E17F
  • 抑制 make clean 中的消息(Makefile 无提示删除)

    我想知道如何避免 Makefile 中出现一些回声 clean rm fr o 该规则将打印 gt make clean rm fr o gt 我怎样才能避免这种情况 首先 实际的命令必须位于下一行 或者至少 GNU Make 是这样 它可
  • 在所有存储过程中搜索模式然后打开它进行更改的方法

    如何在所有存储过程中搜索某个模式 然后打开要编辑的存储过程 SQL Server 2005 内部有内置的东西吗 或者是否有任何第三方插件可以进行此搜索 我也在使用 Red Gate 的 SQL Prompt 但我没有注意到该选项 目前我正在
  • Zend_Db:如何从表中获取行数?

    我想知道一个表中有多少行 我使用的数据库是MySQL数据库 我已经有一个 Db Table 类 用于像这样的调用fetchAll 但我不需要表中的任何信息 只需要行数 如何在不调用的情况下获得表中所有行的计数fetchAll count d
  • 重写大型 IN 子句的最高效方法是什么?

    我使用 go 和 gorm 编写了一个 API 它在我们的数据库上运行计算并返回结果 我刚刚达到了参数限制IN使用聚合时的条件 查询示例 SELECT SUM total amount from Table where user id in
  • 使用 While() 结构时 Gridview 不会填充。 C# ASP.Net

    我在使用此网格视图时遇到问题 我正在用查询填充它 但是 如果我使用 while reader Read 结构 它就不会填充甚至不会出现 没有 while 结构 它工作得很好 但是 我需要访问两个特定字段 代码如下 SqlDataReader
  • getLastknownLocation() 在 nexus 上返回 null 值

    我正在开发基于位置的项目 我使用以下代码 我正在为该项目使用 google api 8 lm requestLocationUpdates LocationManager GPS PROVIDER 0 0 this currloc lm g
  • 为什么我们应该总是从函数返回值?

    我不是一个编程高手 但多次听程序员说我们应该始终从函数返回值 我想知道原因 函数不需要返回任何内容 如果您查看 C 函数 您会发现其中许多函数不需要返回任何内容 好吧 不是明确地 void nonReturningFunction cons