Предполагая, что вы используете PHP 5, вы можете бросить исключение в конструкторе:
class NotFoundException extends Exception {}
class User {
public function __construct($id) {
if (!$this->loadById($id)) {
throw new NotFoundException();
}
}
}
$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false) {
try {
$this->LoggedUser = new User($_SESSION['verbiste_user']);
} catch (NotFoundException $e) {}
}
Для ясности, вы можете обернуть это в статике заводской метод:
class User {
public static function load($id) {
try {
return new User($id);
} catch (NotFoundException $unfe) {
return null;
}
}
// class body here...
}
$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false)
$this->LoggedUser = User::load($_SESSION['verbiste_user']);
Как в стороне, некоторые версии PHP 4 позволили вам установить $ this в NUL L внутри конструктора, но я не думаю, что это когда-либо официально санкционировалось, и «функция» была в конечном итоге удалена.
Великий первый вопрос, кстати. –
Я видел некоторую популярную CMS, которая возвращает FALSE в конструкторе. Что с этим?!?! – loungerdork
Просто подумал, что я звоню здесь ради документации. Поскольку дата так далеко назад, возможно, что CMS, которую вы видите, была построена для PHP4. PHP4 используется для того, чтобы разрешить много плохих вещей, не в последнюю очередь позволяющих пользователю переписать $ this в именованном конструкторе (например, $ this = false). – techdude