2011-11-17 18 views
3

我想确定给定的对象是否已经创建。我看到有对class_existsmethod_exists但什么,我试图找出是,如果new Foo()已调用的方法(希望找出变量它被分配到,但是这并不重要)。如何重用一个对象如果它存在

+2

我不认为有一种方法可以做到这一点。为什么你需要首先找出答案?对于您想实现的目标,可能会有更好的解决方案 –

+0

您需要指定您的用例,因为您要求的内容对于纯粹的PHP语言来说是不可能的,但它不提供这样的用例。 – hakre

+0

isset($ variable)函数用于确定是否设置了变量并且不是NULL。 –

回答

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(); 

用类似的方法,你可以定义附加的辅助静态方法将检查对象是否被实例化或不。你只需要将静态的实例保存在你的类中。

+0

我不确定将它作为单例(我不知道别人是否创建了这个对象的倍数),但是你怎么看待创建一个静态方法来指示构造器是否被调用? – gandalf007

+0

@ gandalf007我在第一个答案处写了这个。是的,你可以做到这一点,这将是完美的。 – ioseb

+0

对不起,看错的那部分 – gandalf007

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>'; 
+0

它看起来像这样的工作,我很紧张,通过get_defined_vars每次aboutlooping但基于我诚然含糊要求这个解决方案应该工作 – gandalf007

+0

是的,您可以使用Singleton模式为你所需要的会更好。 – simshaun

相关问题