2016-11-16 48 views
1

我繼承了以前分配給其他開發公司的php項目,並且我經常看到非常奇怪的代碼實現,這是我以前從未見過的,我認爲這可能是錯誤。也就是說,它們無處不在,服務器日誌不會抱怨它們或發出警告。有可能error_reporting已被關閉。PHP中的新類聲明的語法

例如,我看到了很多類聲明的是這樣的:

$registration = new EventRegistration; 

這怪我,因爲我只看過使用new類實例化的完成:

$registration = new EventRegistration(); 

有人可以澄清,如果這是不正確的/不是最佳做法/可通過?

我認爲這只是一個語法錯誤,將編譯但技術上是錯誤的。類似於當人們使用陣列語法如$array[key]而不是$array['key']時。那是對的嗎?

感謝。

+2

不,它不是一個錯誤或警告或技術上的錯誤,花括號是必要的,如果有任何需要傳遞給類構造函數的參數 –

+0

好吧,謝謝,我明白了爲什麼不需要沒有任何構造函數參數。 – DrewT

回答

1

由於new關鍵字需要創建一個新對象,如果該對象不需要任何參數(如__construct()方法中定義的那樣),那麼它的完美性將會忽略()

class foo{ 
    function __construct(){} 
} // valid 

class bar{ 
    function __construct($arg = null){} 
} // valid 

class foobar{ 
    function __construct($arg){} 
} // not valid 

在這種情況下,如果您沒有通過任何參數,只有foobar會觸發警告。這是一個偏好問題,我會說。

$array[key]會說key是一個常數,並可能會觸發警告。

+0

是的,雖然'$ array [key]'會編譯它,但是會在打開錯誤報告時發出警告。這不是很好的語法,但我在項目的其他地方見過。感謝構造函數的例子,我明白現在的情況。 – DrewT

+0

因爲PHP可以假設(讀取警告),並不意味着它的權利。 – Xorifelse

+0

是的,我知道這是不正確的,雖然通過這就是爲什麼我想檢查類聲明也是。在這個項目xD中有很多需要改變 – DrewT