PHP之新手自學基礎知識(五)——拓展篇之魔術(shù)變量及魔術(shù)函數(shù)

PHP 魔術(shù)變量

魔術(shù)變量就是指那些根據(jù)不同環(huán)境有不同的取值,以下介紹的是魔術(shù)常量,由于在不同環(huán)境有不同的取值所以也叫魔術(shù)變量。知道本質(zhì)是個常量就好了舞虱。

PHP 向它運行的任何腳本提供了大量的預定義常量。
不過很多常量都是由不同的擴展庫定義的母市,只有在加載了這些擴展庫時才會出現(xiàn)矾兜,或者動態(tài)加載后,或者在編譯時已經(jīng)包括進去了患久。
有八個魔術(shù)常量它們的值隨著它們在代碼中的位置改變而改變椅寺。
列表如下:
LINE:找到文件中的當前行號。
FILE:找到文件的完整路徑和文件名蒋失。如果用在被包含文件中返帕,
則返回被包含的文件名。
DIR:找到文件所在的目錄篙挽。如果用在被包括文件中荆萤,則返回被包括的文件所在的目錄。
FUNCTION:函數(shù)名稱(PHP 4.3.0 新加)自 PHP 5 起本常量返回該函數(shù)被定義時的名字 (區(qū)分大小寫)铣卡。
CLASS:類的名稱(PHP 4.3.0 新加)链韭。自 PHP 5 起本常量返回該類被定義時的名字
(區(qū)分大小寫)。
TRAIT:Trait 的名字(PHP 5.4.0 新加)煮落。自 PHP 5.4.0 起敞峭,PHP 實現(xiàn)了代碼復用的一個
方法,稱為 traits蝉仇。
METHOD:類的方法名(PHP 5.0.0 新加)旋讹。返回該方法被定義時的名字
(區(qū)分大小寫)殖蚕。FUNCTION的區(qū)別在于它返回類的名字和方法的名字
FUNCTION只是返回方法的名字,前提在類中骗村。

NAMESPACE:當前命名空間的名稱(PHP 5.3.0 新增)嫌褪。
(區(qū)分大小寫)。此常量是在編譯時定義的胚股。

LINE

確定文件中的當前行號。
例子:

<?php
echo '這是第 " '  . __LINE__ . ' " 行';//輸出這是第 “ 2 ” 行
?>

FILE

文件的完整路徑和文件名裙秋。如果用在被包含文件中琅拌,則返回被包含的文件名。
自 PHP 4.0.2 起摘刑,FILE 總是包含一個絕對路徑(如果是符號連接进宝,則是解析后的絕對路徑),而在此之前的版本有時會包含一個相對路徑枷恕。
例子:

<?php
echo '該文件位于 " '  . __FILE__ . ' " ';
//輸出該文件位于 " F:\PHPDemo\test01\index.php "(這是我的文件路徑)
?>

DIR(PHP 5.3.0中新增)

文件所在的目錄党晋。如果用在被包括文件中,則返回被包括的文件所在的目錄徐块。
它等價于 dirname(FILE)未玻。除非是根目錄,否則目錄中名不包括末尾的斜杠胡控。
例子:

<?php
echo '該文件位于 " '  . __DIR__ . ' " ';
//輸出該文件位于 " F:\PHPDemo\test01"(這是我的文件路徑)
?>

FUNCTION(PHP 4.3.0 新加)(區(qū)分大小寫)

函數(shù)名稱扳剿。自 PHP 5 起本常量返回該函數(shù)被定義時的名字。在 PHP 4 中該值總是小寫字母的昼激。
例子:

<?php
function test() {
    echo  '函數(shù)名為:' . __FUNCTION__ ;//輸出函數(shù)名為:test
}
test();
?>

CLASS(PHP 4.3.0 新加)(區(qū)分大小寫)

類的名稱庇绽。自 PHP 5 起本常量返回該類被定義時的名字。在 PHP 4 中該值總是小寫字母的橙困。
類名包括其被聲明的作用區(qū)域(例如 Foo\Bar)瞧掺。注意自 PHP 5.4 起 CLASS 對 trait 也起作用。當用在 trait 方法中時凡傅,CLASS 是調(diào)用 trait 方法的類的名字辟狈。
例子:

<?php
class test {
    function print() {
        echo '類名為:'  . __CLASS__ . "<br>";
    }
}
$t = new test();
$t->print();//輸出類名為:test
?>

TRAIT(PHP 5.4.0 新加)

Trait 的名字。自 PHP 5.4.0 起像捶,PHP 實現(xiàn)了代碼復用的一個方法上陕,稱為 traits。
例子:

<?php
class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
 
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
 
class MyHelloWorld extends Base {
    use SayWorld;
}
 
$o = new MyHelloWorld();
$o->sayHello();
?>

提示:從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆蓋拓春。其行為 MyHelloWorld 類中定義的方法一致释簿。優(yōu)先順序是當前類中的方法會覆蓋 trait 方法,而 trait 方法又覆蓋了基類中的方法硼莽。

METHOD(PHP 5.0.0 新加)(區(qū)分大小寫)庶溶。

類的方法名煮纵。返回該方法被定義時的名字,如有類的話連類名一起返回
例子:

class a {  
    function fa() {  
        return __METHOD__;  
    }  
      
    function fb() {  
        return __FUNCTION__;  
    }  
}  
  
$Obj = new a();  
echo $Obj->fa();// 輸出 a::fa  
echo $Obj->fb();// 輸出 fb

NAMESPACE(PHP 5.3.0 新增)(區(qū)分大小寫)

返回當前命名空間的名稱。此常量是在編譯時定義的偏螺。
例子:

<?php
namespace MyProject;
 
echo '命名空間為:"', __NAMESPACE__, '"'; // 輸出命名空間為:"MyProject"
?>

PHP 魔術(shù)函數(shù)

PHP魔術(shù)函數(shù)(13個)以后會慢慢學到行疏,這里先做了解:
●   __construct()   實例化對象時被調(diào)用,當__construct和以類名
為函數(shù)名的函數(shù)同時存在時套像,__construct將被調(diào)用酿联,另一個不被調(diào)用。

●   __destruct()   當刪除一個對象或?qū)ο蟛僮鹘K止時被調(diào)用夺巩。

●   __call()   對象調(diào)用某個方法贞让,若方法存在,則直接調(diào)用柳譬;若
不存在喳张,則會去調(diào)用__call函數(shù)。

●   __get()     讀取一個對象的屬性時美澳,若屬性存在销部,則直接返回屬性值;若不存在制跟,則會調(diào)用__get函數(shù)舅桩。

●   __set()     設置一個對象的屬性時,若屬性存在凫岖,則直接賦值江咳;若不存在,則會調(diào)用__set函數(shù)哥放。

●   __toString()   打印一個對象的時被調(diào)用歼指。如echo $obj;或print $obj;

●   __clone()    克隆對象時被調(diào)用。如:$t=new Test();$t1=clone $t;

●   __sleep()    serialize之前被調(diào)用甥雕。若對象比較大踩身,想刪減一點東東再序列化,可考慮一下此函數(shù)社露。

●   __wakeup()   unserialize時被調(diào)用挟阻,做些對象的初始化工作。

●   __isset()    檢測一個對象的屬性是否存在時被調(diào)用峭弟。如:isset($c->name)附鸽。

●   __unset()    unset一個對象的屬性時被調(diào)用。如:unset($c->name)瞒瘸。

●   __set_state()  調(diào)用var_export時坷备,被調(diào)用。用__set_state的返回值做為var_export的返回值情臭。

●   __autoload()   實例化一個對象時省撑,如果對應的類不存在赌蔑,則該方法被調(diào)用。

下一章PHP中的“命名空間”:http://www.reibang.com/p/f67b9b5a356b

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竟秫,一起剝皮案震驚了整個濱河市娃惯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肥败,老刑警劉巖趾浅,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拙吉,居然都是意外死亡潮孽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門筷黔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仗颈,你說我怎么就攤上這事佛舱。” “怎么了挨决?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵请祖,是天一觀的道長。 經(jīng)常有香客問我脖祈,道長肆捕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任盖高,我火速辦了婚禮慎陵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喻奥。我一直安慰自己席纽,他們只是感情好,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布撞蚕。 她就那樣靜靜地躺著润梯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甥厦。 梳的紋絲不亂的頭發(fā)上纺铭,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天,我揣著相機與錄音刀疙,去河邊找鬼舶赔。 笑死,一個胖子當著我的面吹牛庙洼,可吹牛的內(nèi)容都是我干的顿痪。 我是一名探鬼主播镊辕,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚁袭!你這毒婦竟也來了征懈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤揩悄,失蹤者是張志新(化名)和其女友劉穎卖哎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體删性,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡亏娜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹬挺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片维贺。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巴帮,靈堂內(nèi)的尸體忽然破棺而出溯泣,到底是詐尸還是另有隱情,我是刑警寧澤榕茧,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布垃沦,位于F島的核電站,受9級特大地震影響用押,放射性物質(zhì)發(fā)生泄漏肢簿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一蜻拨、第九天 我趴在偏房一處隱蔽的房頂上張望池充。 院中可真熱鬧,春花似錦官觅、人聲如沸纵菌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咱圆。三九已至,卻和暖如春功氨,著一層夾襖步出監(jiān)牢的瞬間序苏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工捷凄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忱详,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓跺涤,卻偏偏與公主長得像匈睁,于是被迫代替她去往敵國和親监透。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容