如何检查对象是否已经实例化?

时间:2011-08-02 01:00:07

标签: php

是否可以检查并查看某个对象是否已使用php实例化?我有一个mysql类,其他页面实例化以使用其方法,我所做的是创建一个记录所有查询的日志。我注意到mysql一次打开3-4次而不是一次。所以我需要验证对象是否被实例化,如果不是,它不会创建另一个并打开另一个无用的连接。

4 个答案:

答案 0 :(得分:6)

听起来像是Singleton模式的完美案例。

class Connection
{
    /**
     * @var Connection
     */
    private static $instance;

    private static $config = array();

    private function __construct()
    {
        // whatever you need in here, just keep the method private
    }

    public function __clone()
    {
        throw new RuntimeException;
    }

    public function __wakeup()
    {
        throw new RuntimeException;
    }

    public static setConfig(array $config)
    {
        self::$config = $config;
    }

    public static function getInstance()
    {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

答案 1 :(得分:5)

您正在寻找singleton

答案 2 :(得分:3)

您可以使用 instanceof 运算符来检查给定变量是否属于特定类:

if ($db instanceof DatabaseClass) :

在此处详细了解:http://php.net/instanceof

答案 3 :(得分:2)

简单地使用is_object,因为类没有类型但只有内存分配,因此在使用新实例化对象时,在类名上使用is_object将只返回一个字符串关键字和对象是在内存中创建的,并且具有目标类型。

测试用例:

class HelloWorld{}

$a = is_object(HelloWorld);
$b = is_object(new HelloWorld);

var_dump($a, $b);

结果:

  

布尔(假)布尔(真)