PHP 方法返回没有值

标签 php oop return

我正处于迁移到 100% OO php 的阶段,我最终遇到了很多这样的问题。如果您觉得它很愚蠢,请原谅,我只是想在开始时使我的 OO 编程实践良好,这样我以后就不必修复它们。

这样做可以吗?

private function _some_funct($args) {
    // Some code here....
    if ($something) return;

    //Rest of code
}

基本上,这里有 2 个问题。

  1. return 后面没有值可以用吗?我经常使用它并且没有遇到任何缺点,但从未在其他人的代码中看到它。我只看到了return false

  2. 以这种方式停止函数通常是可行的,还是我应该重新考虑我的程序结构?

使用它的例子是我正在制作的 CMS。

public function _init_engines() {
    $this->_session_engine = $this->_dep['SessionEngine'];
    $this->_login_engine = $this->_dep['LoginEngine'];
    if ($this->_dep['User'] == false) return;   
    $this->_security_engine = $this->_dep['SecurityEngine'];
    //Other engines go here.......
}

所以我让系统启动 session 并设置 session 变量,然后检查用户是否已登录。如果用户未登录,则 LoginEngine 会处理并加载“登录”模块。加载登录模块后,我不希望实例化其他引擎,因为不需要它们。我本可以使用 dieexit 但这会阻止整个脚本的执行。像这样,我的脚本完成执行,其他不是引擎的东西,比如基准测试和其他一些东西仍然会被执行,这正是我想要的。同样,我应该重新考虑我的逻辑还是您认为这样可以?

最佳答案

return 没有值是可以的,如果:

  1. 您的界面明确表示 - 文档 block 声明 @return void(如果函数中不需要结果值)或类似 @return sometype|null 的内容,其中 sometypestring, int
  2. 使用此类函数/方法的返回值的代码会在使用返回值之前检查 isset() - 如果使用您的代码的人(或您自己)忘记检查它,这可能会导致错误。

return 没有值是不正确的,如果:

  1. 发生错误 - 请改用异常。异常更容易处理,因为您可以:
    1. 在外部范围内的任何地方捕获它们,甚至在全局范围内捕获它们
    2. 传递友好的错误信息
    3. 扩展异常类以提供额外的功能
    4. 准确检查抛出的异常类型
  2. 某些特定的结果类型是预期的 - 在这种情况下,您可能会考虑一些默认的“空”结果,或者再次出现问题时使用异常 - 它仍然比 isset 好得多,因为它是更难忘记 - 异常是一种“响亮”的方式来说明发生了错误。

请永远不要使用 die()exit() 来“处理”错误 - 显示错误的技术细节是一种非常糟糕的做法给用户。

至于您的 _init_engines() 方法 - 在不知道其余部分的情况下真的很难说它是对还是错。

如果您对 PHP 中 OOP 的优秀示例感兴趣,我建议您查看 Symfony .

关于PHP 方法返回没有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651030/

相关文章:

java - Java 有返回上一行的命令吗?

php - ™ 来自数据库未显示符号

PHP 将 $this 传递给类外的函数

php - 使用 PHP 对象设置递归属性是否安全?

javascript - 创建对象属性的多个实例

C++ 错误的返回类型?

java - 如何避免此 java 代码的额外输出

php - 编辑 bootstrap.php 以自定义 Dotenv 行为

php - 对 php 对象如何处理数组感到困惑

java - 加载设置 - 最佳实践