У меня есть этот код.  Возможно ли, чтобы конструктор объекта- User каким-то образом $this->LoggedUser с ошибкой, так что $this->LoggedUser присваивается значение NULL и объект освобождается после возврата конструктора? 
 $this->LoggedUser = NULL; if ($_SESSION['verbiste_user'] != false) $this->LoggedUser = new User($_SESSION['verbiste_user']); 
Предполагая, что вы используете 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 в NULL внутри конструктора, но я не думаю, что это официально санкционировалось, и «функция» была в конечном итоге удалена.
  AFAIK это не может быть сделано, new всегда будет возвращать экземпляр объекта. 
Что я обычно делаю, чтобы обойти это:
  Добавление в объект ->valid логический флаг для объекта, который определяет, был ли объект загружен или нет.  Затем конструктор установит флаг 
  Создание функции-обертки, которая выполняет new команду, возвращает новый объект при успешном выполнении, или при сбое уничтожает его и возвращает false 
–
 function get_car($model) { $car = new Car($model); if ($car->valid === true) return $car; else return false; } 
Мне было бы интересно узнать об альтернативных подходах, но я не знаю.
  Подумайте об этом.  Когда вы используете new , вы получаете новый объект.  Период.  То, что вы делаете, – это функция, которая ищет существующего пользователя и возвращает ее при обнаружении.  Лучше всего это выразить, вероятно, статическую функцию класса, такую как User :: findUser ().  Это также можно расширить, когда вы получаете классы из базового класса. 
Здесь может быть полезен завод:
 class UserFactory { static public function create( $id ) { return ( filter_var( $id, FILTER_VALIDATE_INT, [ 'options' => [ 'min_range' => 1, ] ] ) ? new User( $id ) : null ); } } 
Когда конструктор не работает по неизвестной причине, он не вернет значение NULL или FALSE, но оно выдает исключение. Как и все с PHP5. Если вы не обрабатываете исключение, скрипт прекратит выполнение с ошибкой Uncaught Exception.
может быть, что-то вроде этого:
 class CantCreateException extends Exception{ } class SomeClass { public function __construct() { if (something_bad_happens) { throw ( new CantCreateException()); } } } try{ $obj = new SomeClass(); } catch(CantCreateException $e){ $obj = null; } if($obj===null) echo "couldn't create object"; //jaz303 stole my idea an wrap it into a static method