1

Тема: Викинути виключення, якщо не можливо створити об'єкт

Привіт всім.

Допоможіть відловити помилку при створенні об'єкта.

class Model1{}

try {
    $model = new Model;
} catch (Exception $e) {
    exit('no');
}

В даному прикладі створюється екземпляр класу "Model" якого не існує. Мені треба це відловити. Але якщо такий об'єкт не можливо створити буде фатальна помилка, а не виключення, котре я наполеглево намагаюся відловити.

Fatal error: Uncaught Error: Class 'Model' not found in /opt/lampp/htdocs/api/model.php:7 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/api/model.php on line 7

Придумав, ще один механізм, не те що треба, але працює.

if (class_exists('Model', false)) {
    exit('yes');
} else {
    exit('no');
}

Я вже готовий був використовувати цей спосіб, АЛЕ Є ОДНЕ АЛЕ - я працюю з yii1, де підвантаження моделей відбувається при звернені до неї. Тому class_exists з аргументом autoload=false не буде працювати, а tru видасть фатальну, бо намагатиметься створити об'єкт.

Друзі, що скажете? Як цю помилку можна відловити?

2

Re: Викинути виключення, якщо не можливо створити об'єкт

1. Якщо саме моделі, то можна перевіряти шлях до файлу моделі.
2. Можна написати обробник фатальних помилок саме для відсутніх класів/моделей.
3. Можна перевірити якось так..

class Model{
    
}

$mod = 'Model';

    if (class_exists($mod, false)) {
        $model = new $mod();
    } else {
        exit('no');
    }
    
    var_dump($model);
Подякували: 221VOLT, NaharD2