首頁  >  文章  >  後端開發  >  php7中的建構函數詳解

php7中的建構函數詳解

黄舟
黄舟原創
2017-07-02 09:51:194006瀏覽

在用php7進行開發的時候,遇到了:

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; index has a deprecated constructor

這個提示本來很正常,看起來也很容易理解,而且很多介紹php7的文章中都有提到過,那就是php7中與類別同名的函數作為建構函數的時候會拋出這個提示,推薦使用contruct作為建構函數,像ecshop之類的程式碼就有很多用與類別同名的函數作建構函數的情況。

但我發現thinkphp的控制器中仍然有index控制器中存在index方法的情況,使用的時候並沒有發現會拋出這個提示來。

於是去翻程式碼,但資料,測試,發現有這麼多情況:

1.一個類別中如果同時存在construct(非父類別的)和與類別名稱同名函數,則construct是建構函數,而同名函數則當作普通函數;

2.如果一個子類別的父類別中有construct(即使是public)但子類別中沒有,而子類別中有同名函數,而同名函數是建構函數。如果你用get_class_methods($this);取得類別的方法會發現其實是有construct方法的;

3.php官方手冊中有這麼一句話:

自PHP 5.3.3起,在命名空間中,與類別名稱同名的方法不再作為建構子。這個改變不影響不在命名空間中的類別

測試一些猜想的時候一般不會去使用命名空間,看thinkphp的源碼也沒有哪裡有作什麼特殊處理,一直停留在前兩種情況,很是不解。

還好在php官方手冊中找到了第三種情況,也終於理解了為什麼在thinkphp中沒有那個提示,因為thinkphp使用了命名空間。

以上是php7中的建構函數詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn