在php中我們可以隨時定義自己的常量,同時php本身也預設定義了些非常好用的常量。而又有八個預定義常量並非一成不變,而是會隨著在**位置的變化而變化,這些常量我們稱為魔術常量。
廢話不多說,我們直接上php官方文件的解釋(圖一)。若是不想看這麼多文字,接下來我們用**說話。
圖一.幾個php的魔術常量
首先,我們寫個方法呼叫這些魔術常量(圖二)。我們可以先猜測輸出的結果,是否和你想的一致。
圖二.呼叫各個魔術常量
接下來我們展示各個魔術變數的呼叫結果便可以一目了然的知道這些魔術變數的作用。
圖三.各個魔術常量的呼叫結果
怎樣,是否和你想的一樣。是否一下就理解了這些魔術常量的作用。但是,反應快的同學一下就發現了上面只介紹了7個魔術變數,還少個__trait__。別急,接下來我們便單獨介紹__trait__。為啥我們要把__trait__單獨介紹呢?因為__trait__比較特殊,需要配合php關鍵字trait來使用。
因為php語言特性的原因,php的類繼承只能繼承乙個類(就是我們所謂的單繼承),而不能像其它程式語言一樣同時繼承多個類。因此trait便是為了彌補單繼承而創造的。我們舉個例子。
圖四.計程車的例子
我們先寫兩個類,mytaxi類和car類。比方我擁有一輛計程車叫mytaxi。因為mytaxi屬於車(car),所以mytaxi可以繼承car的屬性和方法。但是mytaxi又是一輛計程車,應該擁有計程車taxi的方法才行啊。但是php單繼承讓mytaxi不能同時繼承car類和taxi的方法。這時我們便用trait關鍵字定義乙個taxi並在裡面寫上taxi的方法。
這下好了,我們只需要在mytaxi裡面用use taxi就能讓mytaxi既繼承了car類又有taxi的方法。最後,我們執行**並呼叫__trait__看下結果。
圖五.圖四執行結果
由圖五可知我們用trait定義了taxi,並且是在testflod命名空間下。
最後簡單說下使用trait的四個注意事項。
一般情況下,trait中只有方法,沒有屬性。單繼承的方式更適合屬性。
trait不能例項化,也就是說,不能使用new的方式來讓乙個trait例項化。
trait中的方法要想讓使用trait的類使用的話,該方法必須是public。
trait中可以巢狀trait。也就是說,乙個trait中可以使用use的方法來巢狀另外乙個trait。如果後面有類來使用這個trait的話,這個類可以獲得兩個trait中的所有為public的方法。
以上便是php的八個魔術常量。
八個笑話八個哲理
1 建築師 一位夫人打 給建築師,說每當火車經過時,她的睡床就會搖動。這簡直是無稽之談 建築師回答說,我來看看。建築師到達後,夫人建議他躺在床上,體會一下火車經過時的感覺。建築師剛 躺下,夫人的丈夫就回來了。他見此情形,便厲聲喝問 你躺在我妻子的床上幹什麼?建築師戰戰兢兢地回答 我說是在等火車,你會...
八個笑話,八個人生哲理
1 建築師 一位夫人打 給建築師,說每當火車經過時,她的睡床就會搖動。這簡直是無稽之談 建築師回答說,我來看看。建築師到達後,夫人建議他躺在床上,體會一下火車經過時的感覺。建築師剛 躺下,夫人的丈夫就回來了。他見此情形,便厲聲喝問 你躺在我妻子的床上幹什麼?建築師戰戰兢兢地回答 我說是在等火車,你會...
八個笑話,八個人生哲理
八個笑話,八個人生哲理 1 建築師 一位夫人打 給建築師,說每當火車經過時,她的睡床就會搖動。這簡直是無稽之談 建築師回答說,我來看看。建築師到達後,夫人建議他躺在床上,體會一下火車經過時的感覺。建築師剛 躺下,夫人的丈夫就回來了。他見此情形,便厲聲喝問 你躺在我妻子的床上幹什麼?建築師戰戰兢兢地回...