【问题标题】:Where/When we should use return false in php [closed]我们应该在哪里/何时在 php 中使用 return false [关闭]
【发布时间】:2015-08-08 21:51:12
【问题描述】:

我做了很多搜索,但找不到任何明确的指南。请你们中的一位专家回答我的问题。 我们应该在哪里/何时在数组或 if 语句中使用“return false”。 例如:

if(file_exists($p)) {
    // do something
} else {
    echo $error;
    return FALSE;
}

完整代码:

class Base {
function __construct() {

    $url = $_GET['url'];
    $url = explode('/',$url);

    $p = $url[0].'.php';

    if(file_exists($p)) {
        require($p);
    } else {
        require('error.php');
        $error = new error();
        $error->Not_Exist();
        return FALSE;
    }

}

请有人解释一下使用return false的原因。

【问题讨论】:

  • 1) 什么时候我们应该在数组中使用“return false” 你想如何在数组中返回一些东西? 2) 当需要代码返回false时返回false ...
  • 请解释一下,“在数组中返回 false”是什么意思
  • 当你需要返回false时,根本没有指南也没有规则。
  • 因为它不存在,您需要找出原因。使用报错php.net/manual/en/function.error-reporting.php
  • @Rizier123 我知道,但我不明白为什么它在显示 $error 后使用 return false。显示错误还不够吗?

标签: php


【解决方案1】:

首先,只有在可能将要被使用时才返回一个值。你可以返回任何你想要的东西,即使它不会被使用,但有什么意义呢?

这是有道理的:

function isOfAge($age) {
    if ($age >= 18) {
        return true;
    }
    return false;
    // Shorter:
    //   return $age >= 18;
}

这没有多大意义:

function outputName($name) {
    echo "Your name is {$name}!";
    return true;
}

其次,布尔值应该仅在函数的结果本质上是布尔值时返回,例如:

  • 评估或比较值(例如isOfAge($age)containsCharacter($str, $char)canBeExecuted($pathToExe)validDate($date)sameValues($a, $b) 等)
  • 执行或运行某些内容并报告结果(例如executeSQL($sql)generateImage($data)runBackgroundProcess($str) 等)

也可以返回一个布尔值只有在函数失败(或成功)时,例如:

function createName($first, $second) {
    if (strlen($first) === 0 || strlen($second) === 0) {
        return false;
    }
    return "{$first} {$second}";
}

然后你可以使用返回值来检查它是否有效,如果有效,那么你可以确定它包含一个字符串:

$name = createName("Sverri");
if ($name === false) {
    die("Invalid first or second name!");
} else {
    echo "Hello $name!";
}

该函数也可以使用异常来编写。异常允许您停止脚本、引发错误、捕获该错误,然后继续执行脚本:

function createName($first, $second) {
    if (strlen($first) === 0) {
        throw new \Exception("Invalid first name");
    }
    if (strlen($second) === 0) {
        throw new \Exception("Invalid second name");
    }
    return "{$first} {$second}";
}
try {
   echo createName("Sverri");
} catch (\Exception $e) {
    die($e->getMessage());
}

一个好的经验法则是问问自己返回一个布尔值是否有意义,以及返回的值是否将被使用

在您问题的代码中,返回任何值都是没有意义的。无论如何,你不能在构造函数中返回任何东西,所以返回一些东西是没有意义的。

如果你想终止一个没有返回值的函数,你可以这样做:

function uselessFunction() {
    return;
}

实际上返回一个值,null,但是当你只想终止一个函数而不返回任何特定值时,你会这样做。

【讨论】:

  • 谢谢你。我明白什么返回真,但返回假让我有点困惑。我根本不知道这意味着什么以及返回 false 时会发生什么。是否意味着停止执行其余代码?
  • 关于我的代码,如果我删除 return false,则会发生致命错误。看来不是没有意义
  • 不,返回值 只是来自函数的值(truefalse 只是值,就像字符串和数字一样)。 return 停止执行函数,但不是整个脚本。
  • 非常感谢。接受为最佳答案
【解决方案2】:

个人通常在functions 中使用它们来告诉我是否发生了什么事。

    <?php
    function isUsernameAvailable($username)
    {
        // Some db functions.

        if ($db->rowCount() == 1) return false;

        return true;
    }
    ?>

所以如果提供的用户名在数据库中不存在,那么它会return true,否则它会return false

用法,

if (isUsernameAvailable("test") == false) {
    // Username does not exist.
} else {
    // Username exists.
}

【讨论】:

  • 这是基于意见的,您不必那样做。
  • ^^ 完全正确!,您理解我的评论完全正确,所以不想要基于意见的答案! VTC -> 主要基于意见 许多好的问题会根据专家经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是而不是事实、参考资料或特定专业知识。
  • 不,不是。 1) 你自己说,这是基于意见的 2) 你甚至写道:personally。因此,当您需要使用return false; 时,没有技术事实。这个问题只是关于 SO 的题外话,不应该回答。
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2017-07-31
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多