我正在尝试确定是否已创建给定对象。我看到有class_exists
和method_exists
的方法,但我想弄清楚的是,是否已调用new Foo()
(并希望找出它所分配的变量,但是并不重要。)
答案 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>';