Php 如果对象存在,如何重用该对象

Php 如果对象存在,如何重用该对象,php,oop,Php,Oop,我正在尝试确定是否已创建给定对象。我看到有一些方法用于class\u存在和method\u存在,但我想弄清楚的是,是否调用了new Foo()(并希望弄清楚它被分配给了什么变量,但这并不重要)。如果我理解正确,您只尝试初始化对象一次。如果是这样,为什么不使用单例模式呢?这将使您不必检查对象是否存在: class MyClass { private static $instance; private function __construct() {}

我正在尝试确定是否已创建给定对象。我看到有一些方法用于
class\u存在
method\u存在
,但我想弄清楚的是,是否调用了
new Foo()
(并希望弄清楚它被分配给了什么变量,但这并不重要)。

如果我理解正确,您只尝试初始化对象一次。如果是这样,为什么不使用单例模式呢?这将使您不必检查对象是否存在:

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

使用类似的方法,您可以定义额外的helper静态方法,这些方法将检查对象是否实例化。您只需要将实例静态地保存在类中。

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

给你。它可以优化一点,但应该可以正常工作

此外,每次都需要将
get\u defined\u 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>';

我认为没有办法做到这一点。你为什么一开始就要知道?对于您想要实现的目标,可能有更好的解决方案。您需要指定您的用例,因为裸PHP语言无法满足您的要求,它没有提供PHP中用于确定变量是否已设置且不为NULL的.isset($variable)函数。如果存在该对象,我希望重用该对象。这个文件包含在其他几个文件中,所以它不像测试isset($foo)那么简单,因为一个程序员可以称它为$bar…看起来这会起作用,我很担心每次都会遇到get_defined_vars,但基于我公认的模糊需求,这个解决方案应该会起作用是的,您最好使用singleton模式来满足您的需要。我不确定将此设置为singleton的效果如何(我不知道其他人是否正在创建此对象的倍数)但是你怎么看待创建一个静态方法来指示是否调用了构造函数呢?@gandalf007我在第一个答案的和处写下了这句话。是的,你可以做到这一点,这将是完美的工作。