爲什麼這個代碼打印「AA」,如果我給我的班級名稱我的班級名稱相同的名稱。功能定義同名PHP中的類
class A{
public function a() {
echo 'A';
}
}
$a = new A();
$a->a(); // AA
謝謝!
爲什麼這個代碼打印「AA」,如果我給我的班級名稱我的班級名稱相同的名稱。功能定義同名PHP中的類
class A{
public function a() {
echo 'A';
}
}
$a = new A();
$a->a(); // AA
謝謝!
發生這種情況的原因是,每行都調用a()
,因爲它以類的名稱命名,所以它被用作構造函數,用於類A
。
通常您會使用__construct
函數,該函數將用作構造函數,但因爲沒有函數被稱爲__construct
,所以在類之後命名的函數將被調用。所以,實際上你的輸出如下:
$a = new A(); // A
$a->a(); // A
積聚到輸出AA
爲了向後兼容PHP 3和4,如果PHP不能找到一個給定類__construct()函數,以及類沒有從父類繼承,它將根據類的名稱搜索舊式構造函數。
構造函數調用自動只要你聲明函數A()
歡迎來到StackOverflow,並感謝您花時間幫助回答問題!一般來說,在回答問題時,你想解釋爲什麼給定的方法不起作用,並且包括一個可以幫助作者朝正確方向的替代方法。我建議閱讀[我如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer)。 – CmdrSharp
http://stackoverflow.com/questions/217618/construct-vs-sameasclassname-for-constructor-in- php – PeeHaa
http://php.net/manual/en/migration70.deprecated.php – PeeHaa
Tl; dr更新您的php並啓用錯誤報告 – PeeHaa