我有这个代码。User对象构造函数是否有可能以某种方式失败,从而$this->LoggedUser为它分配了一个NULL值,并在构造函数返回后释放了该对象?
User
$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,但我认为这从未得到正式批准,并且最终删除了“功能”。