我正在考虑将每个类放入一个单独的文件中,并在类定义之外进行静态初始化。
问题是初始化将在实际需要所述类之前发生(当第一次包含包含该类的文件时会发生)。这是一个问题,因为可能会发生根本不会使用该类的情况,因此不需要进行初始化。而且我认为不在代码开头包含使用过的文件的做法简直是一种肮脏的技术。
如果有人对此问题有可行的解决方案,我将不胜感激。
最佳答案
看看这样的代码。它使用数据库的单例实例,但您仍然可以创建该类的实例:
class DB
{
private static $_db;
public static function pdo()
{
if (is_null(self::$_db))
{
self::$_db=new PDO('pgsql:host=localhost;
port=5432;
dbname=testdb;
user=postgres;
password=abc123');
self::$_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$_db;
}
public static function factory()
{
return new self;
}
private function __construct() {}
当您需要数据库实例时,您可以执行 DB::factory()
。 DB 使用 self::pdo()
返回单例访问数据库。
关于php - 我应该如何弥补 PHP 中静态初始化器的不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428723/