php - 我应该如何弥补 PHP 中静态初始化器的不足?

标签 php static-initializer

我正在考虑将每个类放入一个单独的文件中,并在类定义之外进行静态初始化。

问题是初始化将在实际需要所述类之前发生(当第一次包含包含该类的文件时会发生)。这是一个问题,因为可能会发生根本不会使用该类的情况,因此不需要进行初始化。而且我认为不在代码开头包含使用过的文件的做法简直是一种肮脏的技术。

如果有人对此问题有可行的解决方案,我将不胜感激。

最佳答案

看看这样的代码。它使用数据库的单例实例,但您仍然可以创建该类的实例:

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/

相关文章:

php - 在 while 循环中使用 boolean 结果来显示条件结果

php - 在发送到 PayPal 之前不验证 POST 变量 - 何时检查?

php - 在 7.0 ubuntu 16.04 旁边安装 php 5.6 后,本地虚拟主机停止工作

c++ - 内置类型的对象是否具有特殊的静态初始化顺序优先级?

java - 测试类静态初始化程序的最佳方法是什么?

涉及 {} 的 C 代码

php - 通过客户端脚本请求网站 = Cross Site Scripting Hack。但是通过服务器端脚本请求网站并不是 hack!为什么?

php - 如果标题存在,Wordpress 将显示 the_title()

c# - C# 中的集合初始化器

java - 为什么静态初始化程序允许在 Java 中重新初始化静态变量?