2011-11-17 19 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

相關問題