在codeigniter中使用超级对象有什么好处

时间:2012-12-06 12:59:27

标签: php codeigniter

我正在研究代码点火器。我遇到了这个超级对象。

代码点火器有一个加载类并将它们存储在实例变量中的函数。每次我们需要包含一个新类或以前加载的类时,代码点火器首先在实例数组中搜索它,如果没有找到,则加载它并包含在instanc数组中。

我的问题是在类中我们可以通过load_class函数包含类(因为这个函数首先在insntance数组中搜索,所以减少一次又一次地包含相同类的开销),那么需要声明包含超级对象的内容预定义或加载新类。

当我们能够做到这一点时。

class CLASSNAME
{
  function functionname()
  {
     $object = load_class(classname, location);
     $object->callfunction();
  }
}

那么为什么我们需要这样做

class CLASSNAME
{
  function functionname()
  {
    $superobject = & get_instance();
    $superobject->classobject->function(); 
  }
}

只想知道使用超级对象的好处。它只是包含所有预定义的对象,或者更深层次和更有益的东西,我无法理解。

提前致谢。

2 个答案:

答案 0 :(得分:0)

在您给出的示例中(如果您只需要对库的引用) - 没有任何好处。 get_instance()只是一个更常见(并且已记录)的功能,而load_class()仅供内部使用。

可能的好处是,get_instance()使您可以访问控制器具有的所有,例如,如果要检查控制器属性,调用模型方法等等。

答案 1 :(得分:0)

有时你需要有一个类并扩展另一个继承类。像这样:

class Car extends Garage {
  // properties and functions
}

但在 Codeigniter 中,您必须扩展 CI_Controller 以加载库,帮助程序等。

要同时使用(在加载CodeIgniter的本机资源旁边扩展自己的类),可以使用超级对象。一个例子:

class Car extends Garage {

    protected $CI;

    // We'll use a constructor, as you can't directly call a function
    // from a property definition.
    public function __construct()
    {
            // Assign the CodeIgniter super-object
            $this->CI =& get_instance();
    }

    public function foo()
    {
            $this->CI->load->helper('url');
            redirect();
    }

    public function bar()
    {
            $this->CI->config->item('base_url');
    }
} 

请参阅here

  

在某些情况下,您可能希望开发除控制器之外的类,但能够使用所有CodeIgniter的资源。您可以很容易地看到这一点。