前戲部分:
一、一句話概括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以外的應用請一定不...