我试图在此做我自己,发现似乎工作的解决方案。
为了回应其他人试图通过告诉提问者使用不同的解决方案来回答问题,我也会尝试解释问题的原因。无论是原始海报还是我想要使用异常,因为重点不是使用异常处理功能,而是将这种负担放在我们使用这个类的任何代码上。至少对我而言,这一点是能够使用这个无缝地在其他PHP代码中编写,这些代码可以用非面向对象或非基于异常的风格编写。许多内置的PHP函数都是以这样的方式编写的,以致对于不成功的进程来说错误的结果是可取的。同时,我们可能希望能够在我们自己的代码中以特殊的方式处理这个对象。
例如,我们可能想要做这样的事情:
if (!($goodObject = ObjectFactory::getObject($objectType))) {
// if $objectType was not something ObjectFactory could handle, it
// might return a Special Case object such as FalseObject below
// (see Patterns of Enterprise Application Architecture)
// in order to indicate something went wrong.
// (Because it is easy to do it this way.)
//
// FalseObject could have methods for displaying error information.
}
这里是一个非常简单的实现。
class FalseObject {
public function __toString() {
// return an empty string that in PHP evaluates to false
return '';
}
}
$false = new FalseObject();
if ($false) {
print $false . ' is false.';
} else {
print $false . ' is true.';
}
print '<br />';
if (!$false) {
print $false . ' is really true.';
} else {
print $false . ' is really false.';
}
//我打印$ false只是为了确保没有意外的事情发生。
的输出是:
是假的。 确实是错误的。
我测试过这一点,如果你有这个类里面的一些声明的变量,如它的工作原理,甚至:
class FalseObject {
const flag = true;
public $message = 'a message';
public function __toString() {
return '';
}
}
稍微更有趣的实现可能是:
class FalseException extends Exception {
final public function __toString() {
return '';
}
}
class CustomException extends FalseException { }
$false = new CustomException('Something went wrong.');
使用与以前相同的测试代码,$ false评估为false。
你们错过了这个问题的关键。异常是使用错误的对象。将其更改为“结果”或其他。这一点与此无关,只是“在if语句中可以使对象返回false” – Ethan 2009-07-25 00:28:57
嘿大家,因为我愚蠢地说了我的问题,我在这里问了我的问题:http:///stackoverflow.com/questions/1182710/is-it-possible-to-make-an-object-return-false-by-default 感谢那些帮助。 – Ethan 2009-07-25 18:42:25