如果构造函数中的某些内容失败,如何防止进一步执行类

时间:2012-03-29 13:59:34

标签: php oop constructor

如果构造函数中的某些内容失败,如何防止进一步执行类。

........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块在构造函数中失败,我不想执行put(),但其余的代码应该继续处理.php

新的Pheanstalk(' 127.0.0.1');抛出一个由catch捕获的异常。

2 个答案:

答案 0 :(得分: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());
}

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

答案 1 :(得分:1)

为什么不在构造函数中抛出异常? 见http://php.net/manual/en/language.exceptions.php