[開心學PHP100天(七)]精講PHP建構函式:父親和兒子的恩恩怨怨_PHP教程

來源:互聯網
上載者:User
前戲部分:


一、一句話概括php:

Php就是用來做web應用的,其中這廝很適合做網站,大名鼎鼎的wordpress就是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編譯安裝程式,一鍵安裝配置簡單,不建議直接上手linux學php,等你配置正確後,你對php已經沒興趣了。

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


二、本文部分:

什麼叫建構函式

每個語言(如java、c#、php)建構函式的特點都有些不一樣。每個對象初始化時能自動執行的一個函數,該函數可以不設定任何內容,但凡你要是設定了一定會自動執行。更主要的你無法在外部去手動調用這個函數。

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

為什麼要有建構函式

如果是一個獨立的單類。其實建構函式也就起到“方便”的作用。

譬如:

class A

{

function A()

{

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

}

}

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

那建構函式到底在何時何地有意義呢?其實是在對象和對象繼承上,舉個故事化的列子

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

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

{

function 牛牛()

{

//這裡偷偷摸摸的把目前使用者的一些本地資訊給收集了,偷偷發送到我的郵箱裡,很沒節操有木有?

}

//下面是其他外部可以調用的高上大函數和方法,略

}

這裡我們假設:如果程式員們要想使用我的功能,必須繼承我的類庫,否則你根本看不懂怎麼調用:

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

{

//這裡隨便你搞吧。反正你搞之前都會被我收集到資訊,因為父類我已經設定建構函式了。

}

所以大家知道了吧:

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

2、 更多的是為了物件導向的結構設計而用

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

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

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

PHP的建構函式的特點

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

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

{

function 小牛()

{

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

}

}

這麼寫那麼我就無法在父類的建構函式中執行“收集資訊”的齷齪之舉了。

PHP5中的建構函式特色

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

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

class father

{

function __construct() //這裡你要麼寫成 function father() 要麼就用__construct

{

echo "父親";

}

}

class child extends father

{

function child()

{

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

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

}

}

$child=new child();

以上的建構函式我總結一下:

1、 父親和兒子都是一個祖宗生的,一家人,一脈傳承。

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

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

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

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

class father

{

function __construct() //這裡你要麼寫成 function father() 要麼就用__construct

{

echo "父親";

$this->talk();

}

}

class child extends father

{

function child()

{

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

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

}

function talk()

{

echo "請幫幫我兒子";

}

}

$child=new child();

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

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

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

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

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

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

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

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

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


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

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


------------------------------

關注我的公眾號,每天成熟一點點
關注步驟:
很直接的拿出手機->開啟->點掃一掃,掃下面二維碼即可

輸入php1、php2、php3、php4 可以在中查看講座

http://www.bkjia.com/PHPjc/735869.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/735869.htmlTechArticle前戲部分: 一、一句話概括php: Php就是用來做web應用的,其中這廝很適合做網站,大名鼎鼎的wordpress就是php開發的。Web以外的應用請一定不...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.