如果对象存在,如何重用它

时间:2011-11-17 17:13:47

标签: php oop

我正在尝试确定是否已创建给定对象。我看到有class_existsmethod_exists的方法,但我想弄清楚的是,是否已调用new Foo()(并希望找出它所分配的变量,但是并不重要。)

2 个答案:

答案 0 :(得分:3)

如果我理解你正确,你只想尝试初始化一次对象。如果是这种情况,为什么不使用单例模式?这将使您免于检查对象的存在:

    class MyClass {
      private static $instance;

      private function __construct() {}

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

        return self::$instance;
      }
    }

您可以使用以下代码:

$obj = MyClass::getInstance();

使用类似的方法,您可以定义其他辅助静态方法,以检查对象是否已实例化。你只需要在你的班级内静态保存实例。

答案 1 :(得分:0)

编辑:在上面的评论中看到您需要这个的原因后,这​​绝对不是解决问题的方法。

你去吧。它可以稍微优化一下,但应该可以正常工作。

此外,每次都需要将get_defined_vars()传递给函数,因为该函数只检索调用范围内的变量。在函数内部调用它只会使该函数范围内的变量。

<?php
function isClassDeclared($class_name, $vars, $return_var_name = FALSE) {
    foreach ($vars AS $name => $val) {
        if (is_object($val) && $val instanceof $class_name)
            return $return_var_name ? $name : TRUE;
    }

    return FALSE;
}

class Foo {}
$foo = new Foo;

echo '<pre>';
var_dump(isClassDeclared('foo', get_defined_vars(), TRUE));
var_dump(isClassDeclared('bar', get_defined_vars(), TRUE));
echo '</pre>';
相关问题