检查是否存在类的实例,如果没有创建实例

时间:2014-04-18 19:01:11

标签: php class autoload

我想知道是否可以创建一个函数并传递一个类名。然后,该函数检查当前是否存在该类的实例,如果它不是,则创建该类的实例。此外,如果可能,使该变量全局并要求返回它。我意识到返回可能是唯一的选择。

 function ($class_name) {
      // Check if Exists
      // __autoload will automatically include the file
      // If it does not create a variable where the say '$people = new people();'
      $class_name = new $class_name();

      // Then if possible make this variable a globally accessible var. 
 }

这可能还是我疯了?

3 个答案:

答案 0 :(得分:2)

eval几乎是唯一的方法。确保用户输入不提供此功能非常重要,例如$_GET$_POST值。

function create_or_return($class_name) {
  if(! class_exists($class_name)) {
    eval("class $class_name { }");
    // put it in the global scope
    $GLOBALS[$class_name] = new $class_name;
  }
}

create_or_return("Hello");
var_dump($GLOBALS['Hello']);
/*
    class Hello#1 (0) {
    }
*/

你无法真正使它全局可访问,因为PHP没有像javascript那样的全局对象。但是你不能简单地制作一个容器来容纳这个物体。

答案 1 :(得分:0)

PHP有一个名为class_exists($ class_name)的函数,返回一个bool。

http://www.php.net/manual/en/function.class-exists.php

答案 2 :(得分:0)

有些事情:

function some_fumction($class_name) {
    if(class_exists($class_name)) {
        return new $class_name;
    } else {
        throw new Exception("The class $class_name does not exist");
    }
}