2014-10-17 109 views
4

由於無法更好地表達此問題而抱歉。我試過做一些簡單的測試,並沒有能夠擺脫多少光線。在任何情況下,我不知道如果有,區別以下兩個例子之間存在什麼樣,:在PHP中實例化類實例的不同方式

<?php 
class foo 
{ 
    public function __construct() 
    { 
    } 
} 

$foo1 = new foo; 

這:

<?php 
class foo 
{ 
    public function __construct() 
    { 
    } 
} 

$foo1 = new foo(); 

注意,在第二個例子中,我使用括號一起'新'關鍵字。如果這裏沒有區別,我有什麼可以做我的foo類聲明,會造成差異?如果差異存在,它們對PHP特別有用嗎?謝謝。

+4

它們本質上是一樣的,都會調用'__construct()'方法。但是,如果在實例化對象時需要一些參數,則需要使用括號。 – Crackertastic 2014-10-17 15:47:06

+0

謝謝..你鏈接的問題看起來像重複。完美地回答我的問題。 – oliakaoil 2014-10-17 15:49:49

+0

如果你的構造函數不接受任何參數,那麼調用你的,沒有beacess的類,或者無論你的首選項是什麼,如果你有構造函數參數,然後使用大括號來解析vvalues – 2014-10-17 16:10:13

回答

2

我覺得最好使用圓括號實例化類,即使構造函數不需要任何參數。雖然你的例子做同樣的事情,但如果構造函數改變了,他們不會。這是品味和風格的問題。

這是你的第一個例子:

<?php 
class foo 
{ 
    public function __construct() 
} 

$foo1 = new foo; 

這樣的作品,但如果我們這樣做了什麼?

public function __construct($db = null) {} 

..好,那麼它將仍然工作,因爲這些論點有默認值。

但是,如果我們這樣做?

public function __construct($db) {} 

..它會由於缺少參數而中斷,並且您需要括號才能傳遞參數。如果你回頭去讓foo構造函數更有趣,那麼你只需添加括號和所有參數。

最後,語言演變。我從來沒有看到PHP抱怨,當你使用括號時,但如果你不這樣做,它會有一天變得脾氣暴躁。一些使用無括號的方式說我們正在實例化這個類沒有構造函數。這是個人的品味。您可以使用有意義的缺席:

$f = new foo; // class has no constructor, or constructor has no arguments 
$f = new foo(); // class has a constructor with default arguments we can set later 
$f = new foo($bar) // class has a constructor, and it needs arguments 

如果在整個大型代碼庫中一致地進行操作,上面的操作可以節省時間。我不再那麼肯定了,因爲人們在測試中變得更好 - 但這只是我的看法。

但是,目前,沒有,給出您的示例兩者之間沒有區別。

+0

我看不到你的觀點。最後一個例子不管括號是否都以相同的方式打破。 – 2014-10-17 16:07:43

+0

我的觀點是,你可能只需回去添加它們,而不是最初使用它們會以某種方式拯救你:) – 2014-10-17 16:08:47