【问题标题】:Check if a class has been instantiated检查一个类是否已经实例化
【发布时间】:2014-03-30 15:22:25
【问题描述】:

我想知道如何检查我是否实例化了一个类:

include("includes/class.parse.php"); // Include the class
$parse = new parse(); // instantiate the class

if(class_exists('parse')){
    echo 'Class instantiated!';
} else {
    echo 'Class NOT instantiated!';
}

我是否注释掉$parse = new parse(); 我是否得到“类实例化”?

如何检查?

【问题讨论】:

  • 如果你想防止两次实例化你的类,你正在寻找singleton pattern
  • 请注意,术语“实例化”通常是指正在实例化的对象,而我们所说的“已定义”类。你似乎混合了这个。如果该类定义,那么您应该在第 2 行得到一个运行时错误。之后进行测试几乎没有意义。如果您真的想测试该类的 object 是否已被实例化,那么 class_exists() 无济于事。相反,您必须测试对象是否存在以及它是否是相关类的实例化(is_a()get_class()))...
  • 请说明你(认为你)为什么需要这些信息。

标签: php class


【解决方案1】:

如果你有一个该类型的对象,你就知道你已经实例化了一个类:

$parse instanceof parse

一个类不跟踪它的类型有多少对象被实例化。如果你需要,你必须自己做:

class Foo {

    public static $instances = 0;

    public function __construct() {
        self::$instances++;
    }

}

new Foo;
new Foo;

echo 'Foo has been instantiated ', Foo::$instances, ' times';

但是,我认为没有理由这样做,这是相当无用的信息。

【讨论】:

    【解决方案2】:

    您可以使用get_class

    $parse = new parse(); // instantiate the class
    
    var_dump ( get_class($parse) );  // return false if object is not instantiated
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多