Как предотвратить дальнейшее выполнение класса, если что-то не получается в конструкторе - PullRequest
1 голос
/ 29 марта 2012

Как предотвратить дальнейшее выполнение класса, если что-то не получается в конструкторе.

........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 (), но остальная часть кода должна продолжиться в processing.php

new Pheanstalk ('127.0.0.1');генерирует исключение, которое перехватывается catch.

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Лучшее решение - поймать исключение за пределами вашего класса. Вы можете не только пропустить 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 голос
/ 29 марта 2012

Почему бы вам не выбросить исключение в конструкторе?Смотри http://php.net/manual/en/language.exceptions.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...