在PHP中忽略函数返回值有问题吗

在PHP中忽略函数返回值有问题吗,php,function,return-value,Php,Function,Return Value,例如: // somefile.php function doSomething() { // do lots of code, whatever... return $something; } // mainfile.php include "somefile.php" doSomething(); // ignored the return value, we don't need it here 当PHP中的函数返回一个值但我们不关心它时会发生什么?这种行为是否有问题,

例如:

// somefile.php
function doSomething() {
    // do lots of code, whatever...
    return $something;
}

// mainfile.php
include "somefile.php"
doSomething(); // ignored the return value, we don't need it here

当PHP中的函数返回一个值但我们不关心它时会发生什么?这种行为是否有问题,或者我们是否应该始终获取变量,即使我们从未在函数范围之外使用过它?PHP如何通过返回一个不会在函数范围外使用的值来管理其资源?

返回值将被丢弃。那样做没有什么错。即使没有显式返回的函数也会隐式返回
null

function foo() {}
var_dump(foo());  // NULL

这是一种代码味道,每次你返回一些不会被使用的东西,这意味着你对你的受众没有概念——你可能会错过一些其他的概念

而且,这些功能通常会受到影响

示例不多

  • array\u unshift(&$arr,$value,…)
    将传递的值预先添加到数组并返回新的数组大小,您希望多长时间获取一次该信息?如果你这样做了,你可以随时调用
    count($array)
    ,它就是为此而设计的

  • 排序(&$arr)
    对传递的数组进行排序,如果成功则返回。这有意义吗?当发生错误时,您应该知道,应该引发异常/触发错误,您真的想一直测试成功吗?你呢

  • print\u r()
    就是一个很好的例子,它返回true(总是这样,反正它是无用的)或string,具体取决于传递给它的参数。这绝对不是api应该是什么样子

一个可能的例外可能是流畅的接口,比如jQuery,但这是非常特殊的情况


提示:编写一些测试并重新思考您的体系结构,如果它在其他方面真的没有意义,那么它可能已经足够好了。但在这种情况下,你应该始终小心。

这没什么错。如果有一个函数返回一个值,但也以某种方式改变了程序的状态(称为副作用),调用该函数但忽略返回值只会导致应用所有副作用。当然,如果不存储返回值,您将无法使用它,但有时您需要的只是调用的副作用

有一些人认为,设计API时,应尽可能将用于产生副作用(命令)的函数与用于观察程序某些状态(查询)的函数分开。这一原则被称为。其思想是,所有返回某些内容的函数都不应该因为正在观察程序而修改程序的状态,并且观察行为不应该影响观察到的状态。然后,所有不返回任何内容的函数都被视为命令,仅因其副作用而调用

因此,遵循这些原则的人可能会认为,由于您的函数明显应用了副作用(或者为什么您会调用它而不关心返回值?),因此它不应该观察任何状态(具有返回值)。然而,请注意,这一原则并不意味着要始终严格遵守,而且在这方面也没有达成一致意见

为什么有些人主张命令查询分离?因为它可以确保在两个查询之间没有应用命令的情况下,连续查询返回相同的答案。它是一种较弱的不变性形式,并且带有一种较弱的不变性优势形式,不变性可以用于对程序逻辑进行推理。一致应用时,对象在命令之间是不可变的


在我看来,牢记这一原则通常会减少API的混乱和更清晰的程序逻辑,但不应该走得太远。有时可能需要应用副作用并返回值。然而,当返回值只是一个成功值时,应该考虑在故障上引发异常。

< P>返回只是一个从函数内传递变量以在函数之外使用的手段。函数中的变量将被销毁,除非它们已设置为静态。为了保留该值,您需要指定一个变量来存储它

代码不需要返回变量是很常见的。不需要返回变量并不意味着返回变量没有用处

即使允许函数或方法的返回消失没有不良影响,但这通常是一种不好的做法。当开发人员创建一个返回时,它有一个原因。原因可能有很多,例如:函数的效果可能只有返回结果(本例不太可能符合您的情况),返回的结果可能是顺序操作的参考,返回的结果可能是用于调试

我建议您找到返回结果的意图并相应地处理它。通常情况下,忽略返回结果可能会在应用程序中引入本来可以防止的不可预测状态


例如,数组_walk()。它通过引用处理数组,假设一切顺利,则无需存储用于标准执行的返回变量;但是,如果它失败了,您无法知道,并且如果您自动假定它没有失败,您的应用程序可能会失败或产生意外的结果。如果您收集了该返回变量并发现它为false,那么您可以引发一个异常,尝试找出原因并重试,或者记录该异常以供将来参考。

对于我来说,这一切归结为一个简单的范例:

“函数应该做一件事。它应该做得很好。它应该只做一件事。”

如果您有不止一个调用该函数的原因,那么该函数的作用将非常大


语言的角度来看绝对没有