2016-11-06 56 views
-1

爲什麼這個代碼打印「AA」,如果我給我的班級名稱我的班級名稱相同的名稱。功能定義同名PHP中的類

class A{ 

    public function a() { 
     echo 'A'; 
    } 
} 

$a = new A(); 
$a->a(); // AA 

謝謝!

+1

http://stackoverflow.com/questions/217618/construct-vs-sameasclassname-for-constructor-in- php – PeeHaa

+0

http://php.net/manual/en/migration70.deprecated.php – PeeHaa

+1

Tl; dr更新您的php並啓用錯誤報告 – PeeHaa

回答

0

發生這種情況的原因是,每行都調用a(),因爲它以類的名稱命名,所以它被用作構造函數,用於類A

通常您會使用__construct函數,該函數將用作構造函數,但因爲沒有函數被稱爲__construct,所以在類之後命名的函數將被調用。所以,實際上你的輸出如下:

$a = new A(); // A 
$a->a(); // A 

積聚到輸出AA

爲了向後兼容PHP 3和4,如果PHP不能找到一個給定類__construct()函數,以及類沒有從父類繼承,它將根據類的名稱搜索舊式構造函數。

http://php.net/manual/en/language.oop5.decon.php

-1

構造函數調用自動只要你聲明函數A()

+0

歡迎來到StackOverflow,並感謝您花時間幫助回答問題!一般來說,在回答問題時,你想解釋爲什麼給定的方法不起作用,並且包括一個可以幫助作者朝正確方向的替代方法。我建議閱讀[我如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer)。 – CmdrSharp