Как повторно использовать объект, если он существует

Я пытаюсь определить, был ли данный объект создан. Я вижу, что есть методы для class_exists и method_exists, но то, что я пытаюсь выяснить, - это если был вызван new Foo() (и, надеюсь, выяснить, какая переменная была назначена, но это не так важно).

2 ответа

Если вы правильно поняли, вы пытаетесь инициализировать объект только один раз. Если это так, почему бы не использовать одноэлементный шаблон? Это освободит вас от проверки существования объекта:

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

При подобном подходе вы можете определить дополнительные вспомогательные статические методы, которые будут проверять, был ли объект создан или нет. Вам просто нужно сохранить экземпляр статически внутри вашего класса.


Изменить. Увидев причину, в которой вы нуждаетесь в комментариях выше, это определенно не способ для этого.

Здесь я иду. Он может быть оптимизирован немного, но должен работать нормально.

Кроме того, передача get_defined_vars() в функцию каждый раз необходимо, потому что эта функция только извлекает вары в пределах области действия, которую она вызывала. Вызов его внутри функции приведет только к тому, что 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 class="prettyprint linenums">';
var_dump(isClassDeclared('foo', get_defined_vars(), TRUE));
var_dump(isClassDeclared('bar', get_defined_vars(), TRUE));
echo '
';

licensed under cc by-sa 3.0 with attribution.