首頁  >  文章  >  後端開發  >  開心學PHP100天(七)]精講PHP建構函數:父親與兒子的恩恩怨

開心學PHP100天(七)]精講PHP建構函數:父親與兒子的恩恩怨

WBOY
WBOY原創
2016-08-08 09:31:10733瀏覽

前戲部份:

一、一句話概括php:

一、一句話概括php:

一、一句話概括來做web php開發的。 Web以外的應用請一定不要考慮用php做。

 本文所涉及的一些關鍵字解釋:

  高上大:高階大氣上檔次的簡稱。網路太盛行,網民實在太懶,說全都不高興

Php的幾個版本:

PHP4 應該說是PHP的里程碑版本,譬如zend的引入,各種高引擎的引入加速。不過這個版本物件導向太弱,無視php4是對的。

PHP5 如果大家要開發請下載5.3版本,使用最廣泛,相對比較穩定。 5.0~5.2請直接刪除,5.4以後請謹慎使用,一個因為還沒普及,一個因為和5.4以前版本兼容不行(網上很多開源的類庫不相容5.4以後版本)

PHP6 你能下載到我佩服你。

關於PHP的學習:

 如果只是想快速學php語法,請使用windows下面的php編譯安裝程序,一鍵安裝配置簡單,不建議直接上手動學php語法,請使用windows下面的php編譯安裝程序,一鍵安裝配置簡單,不建議直接上手linux學學學正確後,你對php已經沒興趣了。

 如果學會了要裝到商業環境中,請務必學會linux下php的配置和開發。畢竟很多優秀的第三方支援都是原生在linux中的,效率和穩定性也是linux最佳。當然PHP在IIS7中支持的據說也不錯,不過請不要太當真,沒意思的。

二、正文部分:

什麼叫構造函數

 每個物件初始化時能自動執行的一個函數,該函數可以不設定任何內容,但凡你要是設定了一定會自動執行。更主要的你無法在外部去手動呼叫這個函數。

 常規來講,大部分語言的構造函數名和類名是一樣的,這裡PHP是列外,它原來也是這樣的,但是到了php5它雖然還能一樣,但是已經不建議大家使用和類名一樣的函數名了。

為什麼要有建構子

  如果是獨立的單一類別。其實構造函數也就起到「方便」的作用。

  譬如:

  類 A

{

    //這裡做一些初始化工作

   }

}

這樣有意義嗎?其實沒意義,你完全可以把A()裡面的事情放在外部來呼叫。

那構造函數到底在何時何地有意義呢?其實是在物件和物件繼承上,舉個故事化的列子

  譬如:歷經一年,我終於瘋狗般的開發完成一套很高上大的函數類庫,並自認為這套類庫國內還沒有類似的貨,為了防止別人看懂,我還把類庫結構寫的無比複雜。然後不 小心賣給了多個程式設計師。但是呢?我很想做一些統計,也就是我想知道有哪些人用了我的類庫,好讓我自我感覺很良好,於是我這麼設計了我的基類庫:

   class 牛牛  //這個是高上大類庫名

  {

        function 牛()      //這裡偷偷摸摸的把當前用戶的一些本地資訊給收集了,偷偷發送到我的信箱裡,很沒節操有木有?

       }

     //下面是其他外部可以呼叫的高上大函數和方法,但請必須繼承我的類別函式庫,否則你根本看不懂怎麼呼叫:

  Class 小牛extends  牛牛  //注意這裡直接就是php的繼承寫法了

搞吧。反正你搞之前都會被我收集到資訊,因為父類別我已經設定建構函數了。

  }

所以大家知道了吧:

1、  建構子並不是為了方便而產生的

3、  其繼承性、可控制性、系統性才是構造函數的主要用途,產品化、商業化是使用它的主要目的

4、  如果大家會IOS開發,大家會看到你寫好的視圖如果繼承UITableView,那麼最後你的介面自動就會進行表格的渲染。你想知道蘋果是怎麼實現UITableView的嗎?門都沒有,老實繼承,老實在我的基礎上寫程式碼才是王道。

5、  程式編寫並不是說寫的優雅、優美、藝術、難看懂就是好程序,任何程序的寫法寫的時候主人都是有他自己的目的。同樣,有手腕的老闆對你說的每一句話都是有目的的,並不是為了體現他口才有多麼多麼的好

PHP的構造函數的特點

 上面的限制看似沒問題,其實還是能破的。那就是PHP中子類別繼承父類別後,如果子類別設定了自己的建構函數,那麼父類別的函數就不會自動執行。看程式碼:

 class 小牛extends  乳牛  //注意這裡直接就是php的繼承寫法了

  {

  {

         //我有我自己的建構函數,父類就少操心了

       }

  }

 

PHP5中的構造函數特徵

 大部分語言的構造函數必須和類別名稱相同,事實上上述寫法是PHP4的寫法。到了PHP5人家創始人用__construct 這個函數來代替了,當然,原來的寫法依然兼容

 大家來看這麼一個終極寫法吧(為啥叫終極?因為寫到這我太累了,不得不停下來一步寫完)

 class father

 {     

 

    {

          echo "父親";

    }

}

    function child()

    {

        echo "兒子;  //這裡如果child有自己的建構子了,則不會輸出」父親」

       // parent::__construct();  //如果硬要father的建構子執行,就要這麼幹,別執行無他法

    }

 }

  $child=new

  $child=new  父親和兒子都是一個祖宗生的,一家人,一脈傳承。

2、  如果兒子沒有成家立業(自己沒有構造函數),那麼兒子對外必須告訴大家他是XX的兒子,否則沒人認識這個兒子(父親的構造函數會強制自動執行)

3 、  如果兒子長大了,不想讓父親管頭腳了。那他就必須得自己成家立業(自己定義構造函數)。對外可以直呼自己是誰了,不用告訴別人他父親是誰(只執行自己的構造函數了)

4、  兒子立業後發現不行,有時還得靠父親帶點人脈來給他接點項目做做。於是只能繼續在外面提他父親的名字(執行parent::__construct()來執行父類的建構子)

 

下面我們再來看本章最後一段程式碼:

class father {     

    function __construct() //這裡你要寫成           echo "父親";

          $this ->talk();

    }

}

 class childo 

    {

        echo "兒子";  //這裡如果child有自己的建構子了,則不會輸出」父親」

       parent::constructstruct(       parent::construct();這麼乾,別無他法

    }

    function talk()

    }

 }

  $child=new child();

先看父類,大家會發現,單獨初始化父類會出錯了,因為父類中沒有talk這個函數。於是只能初始化子類別(child),如果執行了parent::__construct(); 則會發現子類別中的talk被執行,其實是被父類別的建構子自動執行的。

大家看到這,一定會對php的建構子有新的看法和認識,其實這真的很有用。我下面接著上面的節奏再用上面的口吻來解釋一下這段代碼:

1、父親終於有一天人老珠黃了,再也不能出去幫兒子接項目了,於是只能呆在家燒燒菜了(父類單獨初始化會出錯)

2、兒子仗著以前父親給他帶來的資源橫衝直撞,並很少回去看望父親,對外還稱自己的父親真沒用,差點想再也不回去探望父親

3、終於有一天,兒子在事業上出現大問題了,而這個問題只有他父親的朋友能解決。

4、然而,年邁的父親生病了,整天躺在病床上,為了兒子父親不計前嫌給他朋友寫了封信,囑咐兒子必須給當面交給他朋友才能拆

5 、兒子把信交給了他父親的朋友(子類的構造函數強制執行父類的構造函數)

6、父親的朋友拆開信,兒子淚眼模糊,信上寫著:請幫幫我的兒子(父類別的建構子自動執行了子類別的方法)

好吧,php建構子講的差不多了,其實不光是php,任何現在還在用的開發語言都有它的獨到之處,沒有哪個語言有前途哪個沒前途,只不過領域不同、客戶要求不同、錢不同。

這裡再給大家個建議:寫程式和做人同樣道理,會做人、明事理、有愛心的人一定很受大家歡迎;同樣,會為用戶考慮的程式設計師,寫出來的程式碼一定會被使用者喜歡、領導喜歡、同事崇拜。

  引用電影”食神”周星馳的一句話:什麼叫“用心才能做出最好的菜”,這個心並不在具體的某個菜裡,這個心就在這裡,就在生活中,就在你對世界的理解和感悟中。

以上就介紹了開心學PHP100天(七)]精講PHP建構函數:父親和兒子的恩恩怨怨,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

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