【发布时间】:2014-06-18 07:25:03
【问题描述】:
我有一个类,其方法需要返回结果状态 (true|false) 并返回状态消息(“它工作/没有工作,因为 x...”)。
这是我尝试过的两种方法...
方法#1:返回布尔值并通过引用传递消息
函数示例:
function do_something ($arg1, $arg2, &$message) {
... do stuff resulting success...
// Give an explanation for why it succeeded... reasons could be varied:
$message = 'It succeeded and here are your instructions for celebrating: ...';
$success = true;
... do stuff resulting in failure...
// Give an explanation for why it failed... reasons could be varied:
$message = 'it failed because of so and so...';
$success = false;
return $success;
}
调用示例:
$message = '';
if ( do_something($arg1, $arg2, $message) ) {
echo "It succeeded because $message.";
} else {
echo "It failed because $message."
}
方法 #2:返回一个 Result 对象
函数示例:
function do_something ($arg1, $arg2) {
... do stuff...
// Give an explanation for why it succeeded... reasons could be varied:
$message = 'It succeeded and here are your instructions for celebrating: ...';
$success = true;
... do stuff...
// Give an explanation for why it failed... reasons could be varied:
$message = 'it failed because of so and so...';
$success = false;
return new Result($success, $message);
}
你可以想象Result的类定义会是什么样子,所以我就不举例了。
调用示例:
$message = '';
$DoSomething = do_something($arg1, $arg2, $message);
if ( $DoSomething->success ) {
echo "It succeeded because ". $DoSomething->message;
} else {
echo "It failed because ". $DoSomething->message;
}
什么是最好的方法,为什么?
【问题讨论】:
-
你也可以使用
return array($success, $message); -
基于意见,但第二个例子是 OOP,更接近 PHP 异常和其他事情的工作方式。特别是如果您的代码是 OOP,那看起来最好。
-
更好的使用例外
-
@hindmost 然后你可以用
list($success, $message) = do_something($arg1, $arg2)解包,类似于Python的元组赋值。 -
您的第一个选项永远不会执行“它失败了,因为”,因为您的函数永远不会返回 false。它被硬编码为返回 true,所以即使消息是失败的,你仍然表示成功。
标签: php oop design-patterns return pass-by-reference