我只是想知道如果放在if语句中,是否有任何方法可以使我的对象返回false。原因是我正在制作一个自定义异常类。我希望能够按照
的方式做点什么class Dog{
public function lookAround()
{
if(seeDog())
{
return bark;
}
else
{
return sit;
}
}
public function seeDog()
{
if(object == Dog)
{
return "husky";
}
else
{
return Dog_Exception(no_see);
}
}
}
我知道这是一个非常愚蠢的例子。但是,重点是,当此对象成立时,if(seeDog())
测试将评估字符串“husky”和true
对象的Dog_Exception
。如果可能,我希望Dog_Exception
评估为false
,如果置于if
条件。这样我就不必使用像if(typeof(seeDog()) == Dog_Exception)
这样的构造。我怀疑这是可能的,但任何帮助都会很棒。谢谢!
答案 0 :(得分:5)
为什么要返回例外?你不应该扔它吗?
答案 1 :(得分:3)
像try catch这样的东西怎么样?你需要抛出异常而不是返回它。
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}
else return 1/$x;
}
try {
echo inverse(5) . "\n";
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
答案 2 :(得分:1)
class Dog{
public function lookAround()
{
try
{
if(seeDog())
{
return bark;
}
}
catch(Dog_Exception $e)
{
return sit;
}
}
public function seeDog()
{
if(object == Dog)
{
return "husky";
}
else
{
throw Dog_Exception(no_see);
}
}
}
答案 3 :(得分:0)
我自己试图这样做,并找到了似乎有效的解决方案。
对于其他试图通过告诉提问者使用不同解决方案来回答问题的人,我也会尝试解释问题的原因。原始海报或我都不想使用异常,因为关键是不要使用异常处理功能,并将这个负担放在我们使用这个类的任何代码上。至少对我而言,重点是能够使用它在其他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。