2009-07-24 31 views
0

我只是想知道是否有任何方法让我的对象如果放置在if语句中返回false。原因是我正在做一个自定义的异常类。我想能够做些什么沿线如何在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())测试将评估true对于字符串“赫斯基”和Dog_Exception对象。如果可能的话,我想Dog_Exception评估为false,如果放置在if条件。这种方式我不必,例如,使用像if(typeof(seeDog()) == Dog_Exception)等构造等我怀疑这是可能的,但任何帮助将是伟大的。谢谢!

+0

你们错过了这个问题的关键。异常是使用错误的对象。将其更改为“结果”或其他。这一点与此无关,只是“在if语句中可以使对象返回false” – Ethan 2009-07-25 00:28:57

+0

嘿大家,因为我愚蠢地说了我的问题,我在这里问了我的问题:http:///stackoverflow.com/questions/1182710/is-it-possible-to-make-an-object-return-false-by-default 感谢那些帮助。 – Ethan 2009-07-25 18:42:25

回答

5

你为什么要返回异常?你不应该扔吗?

+0

+1。你想要什么lookAround()返回?一个字符串?布尔?例外? – thedz 2009-07-24 21:43:26

+0

所有我想要的是一个对象,让我们称之为DogObject,如果我输入 $ dog = new DogObject(); if(!$ dog) echo“Yay,$ dog returned false!”。 } 回声的“耶...”。基本上,我想知道是否有可能使对象返回false。 – Ethan 2009-07-25 18:33:02

3

怎么样的尝试赶上?你需要抛出异常而不是返回它。

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"; 
} 

通过:http://us3.php.net/manual/en/language.exceptions.php

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); 
     } 
    } 
} 
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。

相关问题