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

Php 在codeigniter中使用超级对象有什么好处,php,codeigniter,Php,Codeigniter,我在研究密码点火器。我遇到了这个超级物体 CodeIgniter有一个加载类并将它们存储在实例变量中的函数。每次我们需要包含一个新类或以前加载的类时,CodeIgniter都会首先在实例数组中搜索它,如果没有找到,则加载它并包含在实例数组中 我的问题是在课堂上,我们什么时候可以按load_class函数包含class(因为这个函数首先在insntance数组中搜索,所以减少了一次又一次包含同一个类的开销),那么声明超级对象以包含预定义类或加载新类需要什么呢 我们什么时候能做到 class CLA

我在研究密码点火器。我遇到了这个超级物体

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

我的问题是在课堂上,我们什么时候可以按load_class函数包含class(因为这个函数首先在insntance数组中搜索,所以减少了一次又一次包含同一个类的开销),那么声明超级对象以包含预定义类或加载新类需要什么呢

我们什么时候能做到

class CLASSNAME
{
  function functionname()
  {
     $object = load_class(classname, location);
     $object->callfunction();
  }
}
那么我们为什么要这么做呢

class CLASSNAME
{
  function functionname()
  {
    $superobject = & get_instance();
    $superobject->classobject->function(); 
  }
}
只是想知道使用超级对象的好处。它只是包含所有预定义的对象,还是一些我无法理解的更深刻、更有益的东西


提前感谢。

在您给出的示例中(如果您只需要对库的引用),没有任何好处
get\u instance()
只是一个更常见(并有文档记录)的函数,而
load\u class()
只是供内部使用


可能的好处是
get_instance()
允许您访问控制器拥有的所有内容,例如,如果您希望检查控制器属性、调用模型方法等。

有时您需要拥有一个类并扩展另一个类以进行继承。像这样:

class Car extends Garage {
  // properties and functions
}
但是在Codeigniter中,您必须扩展
CI\u 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');
    }
} 
见:

在某些情况下,您可能希望开发除控制器之外的类,但这些类能够利用CodeIgniter的所有资源。正如您将看到的,这很容易实现


使用现有对象,而不是复制它们。应该会加快速度,因为你不会有重复的数据。是的,这就是我想知道超级对象的好处。这是唯一的好处(为每个类使用现有的已定义对象而不是新对象,这样每个类只有一个对象)还是还有更多的好处。如果我没有错的话,那么在“目标类”中定义一个新对象并包含另一个“必需类”是没有问题的,因为对象范围仍然在类范围内。在那里,我被超级对象的使用所困扰,并且有点困惑,我从我的理解中得到的是,CodeIgniter团队创建了超级对象的概念,以允许其用户使用控制器定义类。load_对象是一个函数,用于初始化代码点火器框架工作的主要和重要类。因此我得出结论,如果有人正在为他们的网站创建一个小框架。在我创建的过程中,使用load_类概念我们可以做到这一点,并且不需要使用超级对象概念,因为对load_类的这个函数进行一个小的修改,我们可以将其用于更广泛的目的。谢谢