我正处于迁移到 100% OO php 的阶段,我最终遇到了很多这样的问题。如果您觉得它很愚蠢,请原谅,我只是想在开始时使我的 OO 编程实践良好,这样我以后就不必修复它们。
这样做可以吗?
private function _some_funct($args) {
// Some code here....
if ($something) return;
//Rest of code
}
基本上,这里有 2 个问题。
return 后面没有值可以用吗?我经常使用它并且没有遇到任何缺点,但从未在其他人的代码中看到它。我只看到了return false。
以这种方式停止函数通常是可行的,还是我应该重新考虑我的程序结构?
使用它的例子是我正在制作的 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 会处理并加载“登录”模块。加载登录模块后,我不希望实例化其他引擎,因为不需要它们。我本可以使用 die 或 exit 但这会阻止整个脚本的执行。像这样,我的脚本完成执行,其他不是引擎的东西,比如基准测试和其他一些东西仍然会被执行,这正是我想要的。同样,我应该重新考虑我的逻辑还是您认为这样可以?
最佳答案
return
没有值是可以的,如果:
- 您的界面明确表示 - 文档 block 声明
@return void
(如果函数中不需要结果值)或类似@return sometype|null
的内容,其中sometype
是string
,int
等 - 使用此类函数/方法的返回值的代码会在使用返回值之前检查
isset()
- 如果使用您的代码的人(或您自己)忘记检查它,这可能会导致错误。
return
没有值是不正确的,如果:
- 发生错误 - 请改用异常。异常更容易处理,因为您可以:
- 在外部范围内的任何地方捕获它们,甚至在全局范围内捕获它们
- 传递友好的错误信息
- 扩展异常类以提供额外的功能
- 准确检查抛出的异常类型
- 某些特定的结果类型是预期的 - 在这种情况下,您可能会考虑一些默认的“空”结果,或者再次出现问题时使用异常 - 它仍然比
isset
好得多,因为它是更难忘记 - 异常是一种“响亮”的方式来说明发生了错误。
请永远不要使用 die()
或 exit()
来“处理”错误 - 显示错误的技术细节是一种非常糟糕的做法给用户。
至于您的 _init_engines()
方法 - 在不知道其余部分的情况下真的很难说它是对还是错。
如果您对 PHP 中 OOP 的优秀示例感兴趣,我建议您查看 Symfony .
关于PHP 方法返回没有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651030/