前戲部份:
一、一句話概括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教程有興趣的朋友有所幫助。