Tôi thường thích viết các lớp không tĩnh thông thường và sử dụng một lớp nhà máy để khởi tạo các thể hiện đơn (sudo static) của đối tượng.
Cách này hàm tạo và hàm hủy hoạt động như bình thường và tôi có thể tạo thêm các thể hiện không tĩnh nếu tôi muốn (ví dụ: kết nối DB thứ hai)
Tôi sử dụng điều này mọi lúc và đặc biệt hữu ích để tạo trình xử lý phiên lưu trữ DB tùy chỉnh, vì khi trang kết thúc, hàm hủy sẽ đẩy phiên tới cơ sở dữ liệu.
Một lợi thế khác là bạn có thể bỏ qua thứ tự bạn gọi mọi thứ vì mọi thứ sẽ được thiết lập theo yêu cầu.
class Factory {
static function &getDB ($construct_params = null)
{
static $instance;
if( ! is_object($instance) )
{
include_once("clsDB.php");
$instance = new clsDB($construct_params); // constructor will be called
}
return $instance;
}
}
Lớp DB ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
Bất cứ nơi nào bạn muốn sử dụng nó chỉ cần gọi ...
$static_instance = &Factory::getDB($somekickoff);
Sau đó, chỉ cần coi tất cả các phương thức là không tĩnh (vì chúng là)
echo $static_instance->getvar();