2012-03-29 100 views
1

如何在构造函数中失败时阻止进一步执行类。如何防止在构造函数中失败时继续执行类

........Worker.php.............. 
class Worker { 

    public function __construct() { 

     try {    
      $this->pheanstalk = new Pheanstalk('127.0.0.1'); 
     } 
     catch (Exception $e) { 
      logFatal('Pheanstalk: '.$e->getMessage()); 
     } 
    } 
    ............. 
    ............. 
    ............. 
    ............. 
} 

............processing.php.......... 
require_once ROOTPATH.'worker.php'; 

$worker = new worker(); 
$worker -> put($Data); 
............. 
............. 
............. 
............. 

现在,如果try块在构造失败,我不想把执行(),但其余的代码应该processing.php继续

新Pheanstalk(“127.0.0.1”);抛出一个被catch捕获的异常。

回答

5

最好的解决办法是在课堂外捕捉异常。不仅可以跳过put,记录错误也不是该类别的责任。哦,单元测试也更容易!

class SomeClass 
{ 
    public function __construct() 
    { 
     if ($somethingFails === true) 
      throw new Exception(); 
    } 
} 

try { 
    $instance = new SomeClass(); 
    $instance->put(); 
} catch (Exception $exception) { 
    // Handle here 
    logFatal('Pheanstalk: '.$e->getMessage()); 
} 

如果这是另一个应用程序抛出异常,并且你的构造函数被缠绕它。考虑捕捉异常,然后抛出自己的异常。

+0

new Pheanstalk('127.0.0.1');抛出一个被catch捕获的异常,所以你希望我做什么更改 – aWebDeveloper 2012-03-29 14:05:56

+0

我在帖子的底部添加了一些更多的解释。如果你的课堂是一个包装,我会赶上并抛出我自己的例外。仍然遵循最初的解决方案。 – 2012-03-29 14:07:24

+0

谢谢你会试试看 – aWebDeveloper 2012-03-29 14:08:26

相关问题