困惑于CodeIgniter中的对象和类?

时间:2010-09-12 03:04:02

标签: php oop class codeigniter object

我是CodeIgniter的新手并且有一个问题。我对类,库和对象有点困惑。

CodeIgniter是否取代了使用对象的常规PHP方式,即$var = new car();与库$this->load->library('some_library'); $this->some_library->some_function();

如果两者都有效,是否存在差异?如果是这样,有什么不同,我何时使用一个而不是另一个?哪种更常见/适当?

我在问,因为我创建了一个类,但我不确定实例化它的正确方式是什么。

提前致谢

3 个答案:

答案 0 :(得分:5)

我不熟悉CodeIgnitier。但熟悉其他PHP框架。大多数框架都使用这种方式来改进性能,注册事物,执行某些事件,并使开发人员更简单......

例如,如果你想在library目录中的某处创建类“car”,你必须首先包含该文件,然后才能创建该类的对象(多行代码,更多错误空间) )。该框架将创建该类,并在一行代码中包含相关文件(更简单,更安全)。

框架方式也可以作为工厂使用。它不会重新创建一个对象,而只会创建一次对象,每次再次调用该方法时,它都会返回对现有对象的引用。

使用框架时,幕后发生了更多事情。事情正在注册等......

答案 1 :(得分:3)

CI本身不会取代类行为,它只是添加了允许通过核心对象访问自定义库/模型/视图作为单例对象的功能,以简化。

没有什么能阻止你创建(正如我在我的一个项目中)有非单例实体类的附加文件和模型中的require它们以供进一步使用。 事后看来,我应该为此使用过帮手。

加载器($this->load)类的作用是,它创建指定类的一个对象(模型,库或视图 - 虽然不是帮助器,见下文)并将其作为属性附加通常可以通过$ this访问的核心类。

助手有点不同。它们没有附加,而只是从它们被加载的位置“读取”到全局命名空间中。

要回答您的问题,在不需要创建一个类的多个实例的情况下使用loader类更为合适。如果你需要'实体'课程,你最好的CI兼容赌注就是将它们创建为帮助者。

答案 2 :(得分:0)

只有这个上下文,这看起来像控制反转(也许我错了,我没有仔细看过CodeIgniter)。

您不希望像car中那样依赖new car()类型。如果以后想要$var racecar怎么办? $var仍然可以执行相同的操作,但它被强制为car,因为您直接构造它。或者,如果您正在测试此类,但car是一个调用某些外部服务的复杂对象。您想测试您的逻辑,但不关心汽车服务是否工作。因此,您应该可以更改$var以实际加载mockcar。如果您执行$var = new car(),则无法执行此操作。

What is Inversion of Control?