我看到在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