โดยทั่วไปฉันชอบที่จะเขียนคลาสที่ไม่คงที่เป็นประจำและใช้คลาสโรงงานเพื่ออินสแตนซ์อินสแตนซ์ของวัตถุ
วิธีนี้ตัวสร้างและ destructor ทำงานตามปกติและฉันสามารถสร้างอินสแตนซ์ที่ไม่ใช่แบบคงที่เพิ่มเติมได้ถ้าต้องการ (ตัวอย่างเช่นการเชื่อมต่อฐานข้อมูลครั้งที่สอง)
ฉันใช้สิ่งนี้ตลอดเวลาและเป็นประโยชน์อย่างยิ่งสำหรับการสร้างตัวจัดการเซสชันเก็บ DB ที่กำหนดเองเช่นเมื่อหน้ายุติ destructor จะผลักเซสชั่นไปยังฐานข้อมูล
ข้อดีอีกอย่างคือคุณสามารถเพิกเฉยต่อคำสั่งซื้อที่คุณเรียกว่าสิ่งต่าง ๆ เพราะทุกอย่างจะถูกติดตั้งตามความต้องการ
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;
}
}
คลาส DB ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
ทุกที่ที่คุณต้องการใช้เพียงแค่โทร ...
$static_instance = &Factory::getDB($somekickoff);
จากนั้นให้ถือว่าวิธีทั้งหมดเป็นแบบไม่คงที่
echo $static_instance->getvar();