为什么在所有控制器之前使用App :: uses(' Controller',' Controller')

时间:2015-02-02 12:12:03

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-2.3

很抱歉要问,但我不明白为什么在每个控制器之前写下行。

App::uses('Controller', 'Controller');

如果我们使用extends controller编写以下代码,这意味着我们可以在Controller中访问AppController类的所有属性和功能。

class AppController extends Controller{...}

所以,我的问题是如果我不写App::uses('Controller', 'Controller');对我的代码或性能有任何影响?

1 个答案:

答案 0 :(得分:1)

App :: uses是一个静态方法,用于注册文件的位置(与类对应),以便加载PHP自动加载器以便能够即时加载它。

App::uses('AppController', 'Controller');行声明如果AppController class被引用(或扩展,在这种情况下)并且AppController class尚未定义,那么它应该在app / Controller目录中查找文件并构造实际的文件名,如下所示:AppController.php部分是cakePHP约定,部分PHP5。

删除此行时没有任何中断的原因是因为该文件可能需要应用程序中的其他位置(另一个控制器,在引导期间 - 所以php已经在内存中有AppController类。

它包含在第一行的原因是你烘焙的控制器扩展了AppController类。它对正在加载的AppController类具有硬依赖性,并且可能在蛋糕外壳或单元测试环境中,app控制器不会在手动自动加载,因此必须进行包含。 App :: uses就像告诉蛋糕(和PHP)一样,嘿,如果您正在寻找AppController类并且您还没有它,那么您应该查看app / Controller目录和最后添加.php!'如果文件已经加载,则App :: uses将无效。

请参阅What is the purpose of App::uses('AppController', 'Controller') in each controller - cakephp