我看到在CakePHP中3.X所有预装的方法,在所有的3.X文档行在CakePHP中,parent :: initialize()是做什么的?
parent::initialize();
。
删除该行或忘记将该行添加到新方法似乎没有任何负面影响。
哪一个问题,它是做什么的?
道歉是,这是一个完全的小白问题..
我看到在CakePHP中3.X所有预装的方法,在所有的3.X文档行在CakePHP中,parent :: initialize()是做什么的?
parent::initialize();
。
删除该行或忘记将该行添加到新方法似乎没有任何负面影响。
哪一个问题,它是做什么的?
道歉是,这是一个完全的小白问题..
It is simple OOP.它调用同名的父方法。
Aclass {
public function foo() { echo 'bar'; };
}
Bclass extends Aclass {
public function foo() { parent::foo(); echo 'foobar'; }
}
只要尝试一下并删除父呼叫,就会看到它的作用。父母通常应该被调用,特别是在初始化()回调等方法中。但是,何时打电话或不打电话是您必须做出的决定。这取决于你是否想要或需要调用父方法逻辑或不。这被称为“超载”。
这使您可以在方法的父调用之前或之后添加功能,这是很常见的事情。我建议你到read the OOP chapter的PHP手册。
在控制器的initialize()
方法,你可以定义要加载的任何部件,并为他们任何 配置数据:
public function initialize()
{
parent::initialize();
$this->loadComponent('Security');
$this->loadComponent('Paginator');
$this->loadComponent('RequestHandler');
}
正是它说你从父类运行一个方法。所以例如。
class AppController extends Controller {
public function initialize() {
echo 'hello world';
// do more sh*t
}
}
class UsersController extends AppController {
public function initialize() {
parent::initialize(); // this will run the method initialize from app controller that will echo 'hello world'
// do more sh*t
}
}
它没有做任何事情,当你删除它,因为没有什么母公司内部的初始化功能,但它的存在,以防万一你想从你的父母控制功能扩展到子控制器。例如:
在AppController中有一个beforeFilter函数,它定义了在页面加载之前要运行的内容。比方说,我希望有一个功能,每一个页面上运行 - 一个简单的重定向功能,如果用户没有登录:
if (!$this->Auth->user()) {
$this->redirect('Users/login');
}
而不是把这个在beforeFilter上每一个控制器我去的,我可以把它放在AppController的beforeFilter里面。
我的其他控制器,比如UsersController,从AppController的扩展:
class UsersController extends AppController {
所以在beforeFilter在我UsersController我可以这样做:
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
}
现在我从继承这个重定向行为父控制器(AppController),,这样相同的代码也运行在我的子控制器(UsersController) - 无论控制器用户去哪里,他们都会得到指向登录页面,如果他们没有登录。
这对于parent :: initialize()方法是一样的。您继承了父控制器中初始化函数内存在的功能。这只是用于消除冗余代码的功能。所以基本上,如果你看到你在每一页上使用的代码,找到一种方法使它成为一个面向对象的方法,把它移除并放入你的代码可以继承的文件中。它将HTML和HTML文档中的页眉和页脚代码放在一起,并将它们放在自己的PHP文件中,这样您就可以在一个区域中进行更改,并更新所有受影响的派生代码,而不是在每个HTML中编辑页眉和页脚文件。
道歉,我没有意识到我从来没有选择这个答案。一年后,我可以看到多么愚蠢的狗屎问题。 (但我真的很感激所有花时间回答的人!) –
哈哈,谢谢,并且欢迎。 ;) – burzum