Php 为什么Codeigniter假设我在使用$this->;时要创建类的实例;负载

Php 为什么Codeigniter假设我在使用$this->;时要创建类的实例;负载,php,codeigniter,classloader,Php,Codeigniter,Classloader,在Codeigniter中,当我们在控制器中使用$this->load('class_name')时,CI将尝试使用其构造函数创建类/模型的实例 但有时候,我并不需要那个类的实例,我只想从中调用一些静态函数。另外,$this->load('class_name')有一个很大的限制,它不允许我将参数传递给构造函数(除非我们扩展或修改CI的核心类) 我认为$this->load('class_name')函数应该只为我在类php文件上执行一次require_,并允许我在控制器中自由地使用类执行操作(

在Codeigniter中,当我们在控制器中使用
$this->load('class_name')
时,CI将尝试使用其构造函数创建类/模型的实例

但有时候,我并不需要那个类的实例,我只想从中调用一些静态函数。另外,
$this->load('class_name')
有一个很大的限制,它不允许我将参数传递给构造函数(除非我们扩展或修改CI的核心类)

我认为
$this->load('class_name')
函数应该只为我在类php文件上执行一次
require_
,并允许我在控制器中自由地使用类执行操作(创建实例/调用静态函数)


我应该忽略这个函数并使用
require\u once
还是编写自己的自动加载函数来加载类?这样,我觉得很奇怪,因为我似乎没有在CI框中编写代码。

您可以将参数传递给构造函数。请参阅“初始化类时传递参数”部分。

我发现CodeIgniter的对象创建和加载非常有限。我想要完全控制我的代码,并在后台使用小魔术。我已经开始使用。它非常轻,本质上是(也是一个很好的替代品)。你不需要ORM的全部理论,只需要类加载器。有一些配置修补,以获得正确的,但它的工作奇迹

使用PHP5.3,我现在在应用程序目录中有了名称空间类。例如,我在Tests目录中创建了一个新类:Application\Tests\SomeTest.php

该测试可能看起来像这样:

namespace Tests;

class SomeTest {
  ...
}
我会在我的代码(控制器、视图、助手)中使用这个类,只需使用完全限定的名称空间(即
$test=new\Tests\SomeTest
)或代码顶部的“use”语句(
use\Tests\SomeTest as SomeTest

通过这种方式,我打算用OO名称空间的变体替换所有库和模型。这样做有很多好处:使用SPL快速自动加载,对类/方法提供完整的IDE intellisense支持(CodeIgniter在这方面非常糟糕),您的代码可以更方便地移植到其他框架或项目中

也就是说,我仍然使用很多CodeIgniter引擎。这基本上意味着我的大多数类中都有
$CI=&get\u instance()
。这仍然是一项正在进行的工作,我认为我需要CI的主要原因是它的数据库访问。如果我能算出这一点。。。使用依赖注入之类的东西,那么我的类中就根本不需要CodeIgniter了。我将只是在MVC框架中使用它,偶尔在我的控制器中使用它的方法


我知道这超出了你的问题范围,但希望它能成为我的食物——它也能帮助我把它写下来。

Ha,你搞定了!我想知道为什么当我加载模型构造函数时,它似乎被调用了。。。有人叫它。真奇怪。