这在PHP中可能吗?
try { $obj = new Clas(); if ($obj->foo) { // how to exit from this try block? } // do other stuff here } catch(Exception $e) { }
字符串我知道我可以把其他的东西放在{}之间,但是这会增加更大代码块的缩进,我不喜欢这样:P
{}
n8ghc7c11#
当然是goto!
try { $obj = new Clas(); if ($obj->foo) { goto break_free_of_try; } // do other stuff here } catch(Exception $e) { } break_free_of_try:
字符串
jmo0nnb32#
好吧,没有理由这样做,但是你可以在try块中强制一个异常,停止执行你的函数。
try
try { if ($you_dont_like_something){ throw new Exception(); //No code will be executed after the exception has been thrown. } } catch (Exception $e){ echo "Something went wrong"; }
6uxekuva3#
我也遇到过这种情况,和你一样,不希望有无数的if/else if/else if/else语句,因为它会使代码可读性降低。最后,我用自己的Exception类扩展了Exception类。下面的示例类是针对验证问题的,当触发时会产生不太严重的“日志通知”
class ValidationEx extends Exception { public function __construct($message, $code = 0, Exception $previous = null) { parent::__construct($message, $code, $previous); } public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } }
字符串在我的主要代码中我称之为;
throw new ValidationEx('You maniac!');
型然后在Try语句的末尾我有
catch(ValidationEx $e) { echo $e->getMessage(); } catch(Exception $e){ echo $e->getMessage(); }
型欢迎评论和批评,我们都在这里学习!
bvpmtnay4#
try { $object = new Something(); if ($object->value) { // do stuff } else { // do other stuff } } catch (Exception $e) { // handle exceptions }
flvlnr445#
你就不能这样做吗?
try{ $obj = new Clas(); if(!$obj->foo){ // do other stuff here } }catch(Exception $e){ }
stszievb6#
在php 5.3+中,使用带有try catch块的异常的好处是,您可以创建自己的异常并以您想要的方式和时间处理它们。参见:Extending Exceptions
class OtherException extends Exception { //... }
字符串然后,您可以捕获特定的异常,或者在catch \Exception块中使用if ($e instanceof OtherException)来确定如何处理异常。1.处理示例:http://ideone.com/ggz8fu的1.未处理示例:http://ideone.com/luPQel的
catch \Exception
if ($e instanceof OtherException)
try { $obj = (object) array('foo' => 'bar'); if ($obj->foo) { throw new OtherException; } /* do stuff */ } catch (OtherException $e) { /* do other stuff here and handle exception */ } catch (Exception $e) { if ($e instanceof InvalidArgumentException) { throw $e; //don't handle the exception } }
型这使您的代码更具可读性,并且更容易进行故障排除,而不是许多替代解决方案。也就是说,异常应该被视为正常流程之外的意外功能。
t5zmwmid7#
我会这么做
<?php echo 'this' . PHP_EOL; switch(true) { default: try { echo 'is' . PHP_EOL; break; echo 'not' . PHP_EOL; } catch (Exception $e) { // error_log($e->getMessage()); } } echo 'fun !';
字符串:—)
wnavrhmk8#
就我个人而言,我喜欢使用
throw new MyException("optional message", MyException::ERROR_SUCCESS);
字符串我可以用下面的方法来理解:
switch($e->getCode()) { /** other cases make sense here */ case MyException::ERROR_SQL: logThis("A SQL error occurred. Details: " . $e->getMessage()); break; case MyException::ERROR_SUCCESS: logThis("Completed with success. Details: " . $e->getMessage()); break; case MyException::ERROR_UNDEFINED: default: logThis("Undefined error. Details: " . $e->getMessage()); break; }
型
8条答案
按热度按时间n8ghc7c11#
当然是goto!
字符串
jmo0nnb32#
好吧,没有理由这样做,但是你可以在
try
块中强制一个异常,停止执行你的函数。字符串
6uxekuva3#
我也遇到过这种情况,和你一样,不希望有无数的if/else if/else if/else语句,因为它会使代码可读性降低。
最后,我用自己的Exception类扩展了Exception类。下面的示例类是针对验证问题的,当触发时会产生不太严重的“日志通知”
字符串
在我的主要代码中我称之为;
型
然后在Try语句的末尾我有
型
欢迎评论和批评,我们都在这里学习!
bvpmtnay4#
字符串
flvlnr445#
你就不能这样做吗?
字符串
stszievb6#
在php 5.3+中,使用带有try catch块的异常的好处是,您可以创建自己的异常并以您想要的方式和时间处理它们。参见:Extending Exceptions
字符串
然后,您可以捕获特定的异常,或者在
catch \Exception
块中使用if ($e instanceof OtherException)
来确定如何处理异常。1.处理示例:http://ideone.com/ggz8fu的
1.未处理示例:http://ideone.com/luPQel的
型
这使您的代码更具可读性,并且更容易进行故障排除,而不是许多替代解决方案。
也就是说,异常应该被视为正常流程之外的意外功能。
t5zmwmid7#
我会这么做
字符串
:—)
wnavrhmk8#
就我个人而言,我喜欢使用
字符串
我可以用下面的方法来理解:
型