Giả sử bạn đang sử dụng PHP 5, bạn có thể ném một ngoại lệ trong các nhà xây dựng:
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) {}
}
Để rõ ràng, bạn có thể bọc này trong tĩnh phương thức nhà máy:
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']);
Ngoài ra, một số phiên bản của PHP 4 cho phép bạn đặt $ this thành NUL L bên trong các nhà xây dựng nhưng tôi không nghĩ rằng đã từng bị chính thức xử phạt và 'tính năng' cuối cùng đã được gỡ bỏ.
Great câu hỏi đầu tiên bằng cách này. –
Tôi đã nhìn thấy một CMS phổ biến nhất định trả về FALSE trong một hàm tạo. Có chuyện gì thế?!?! – loungerdork
Chỉ cần nghĩ rằng tôi sẽ kêu vang ở đây vì tài liệu hướng dẫn. Kể từ ngày cho đến nay trở lại, có thể là CMS bạn đang thấy được xây dựng cho PHP4. PHP4 được sử dụng để cho phép rất nhiều điều xấu, không phải là ít nhất trong số đó cho phép người dùng ghi đè $ this trong constructor được đặt tên (ví dụ $ this = false). – techdude