2012-10-13 43 views
0

我剛剛開始嘗試使用OO PHP,但有一個基本原則我並沒有真正理解,並且沒有在其中找到太多的信息。oop php構造函數訪問修飾符,使用哪一個?

當創建一個__construct()方法時,爲什麼要將其設置爲public,當它專門用於該類的構造函數? 您想在課堂外調用構造函數嗎?

對我來說,似乎使用受保護的構造是很好的做法,對不對?

我知道這是基本的面向對象的東西,但我不直接找到任何信息就可以了,專門爲構造函數。當你創建一個類的新實例

回答

3

,調用構造函數。如果構造函數不公開,則其他代碼不能創建該類的實例。

因此,如果你想創建類的實例,使構造公衆。

構造函數始終只是它定義的類的一部分,我不明白「什麼時候它是該類的構造函數」


澄清:

只有這樣,才能調用構造函數是new Class()。沒有其他方法可以調用它。 __constructmagic method,並且沒有辦法顯式調用魔術方法。

+0

因爲構造函數在創建新對象後自動執行。我正是這個意思。所以我不明白你什麼時候可以在類之外調用構造函數。也許我過於複雜的東西.. – fishbaitfood

+0

你不能。調用構造函數的唯一方法是使用'new Class()'。無法以其他方式調用它。 '__construct'是[magic method](http://php.net/manual/en/language.oop5.magic.php),並且沒有辦法顯式調用魔術方法。 –

+0

儘管可以使用靜態方法來調用私有構造函數。 – phant0m

5

__construct(而不是「__constructor」)方法是當您執行new MyClass()時調用的方法,即當您實例化類時。構造函數需要public,除非您只想從本身內部實例化類。如果是後者,則至少需要一個其他方法,您可以調用其中的類將自己實例化的其他方法,否則您無法創建任何實例。

+0

編輯錯字。所以使用公共構造函數更常見? – fishbaitfood

+1

@fishbaitfood:是的,否則你不能真正創建類的實例。你需要其他方法來爲你做這件事,正如他在答案中所解釋的那樣。你沒看過嗎? ;)*「構造函數需要公開,否則你無法創建它的任何實例。」*。因爲它是很常見的創建類的實例(否則,什麼是OOP,當你無法創建對象?點),通常使構造公共 –

+0

就像我已經說過了,我是過於複雜的事情。 :)我想你可以調用類之外的所有公共方法,甚至__construct()一個... :) – fishbaitfood