摘要:可變變量可變變量是語(yǔ)言中的一種特殊用法,不知其他語(yǔ)言存不存在。簡(jiǎn)而言之,可變變量就是,一個(gè)可變變量獲取了一個(gè)普通變量的值作為這個(gè)可變變量的變量名。當(dāng)可變變量用于數(shù)組時(shí),可能會(huì)出現(xiàn)模棱兩可的問(wèn)題。常量語(yǔ)法常量在腳本執(zhí)行期間其值不能改變。
變量基礎(chǔ)
PHP中的變量用一個(gè)美元符號(hào)后面跟變量名來(lái)表示。變量名是區(qū)分大小寫(xiě)的,并且出現(xiàn)中文可能也是合法的。
變量默認(rèn)總是傳值賦值。PHP也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡(jiǎn)單的引用(換言之,"成為其別名" 或者 "指向")了原始變量。改動(dòng)新的變量將影響到原始變量,反之亦然。使用引用賦值,簡(jiǎn)單地將一個(gè)&符號(hào)加到將要賦值的變量前(源變量)。注意,只有有名字的變量才可以引用賦值。
預(yù)定義變量PHP擁有大量預(yù)定義變量,許多變量依賴與服務(wù)器,某些預(yù)定義變量以命令行形式運(yùn)行時(shí)并不生效。
PHP提供了一套附加的預(yù)定數(shù)組,這些數(shù)組變量包含了來(lái)自web服務(wù)器(如果可用),運(yùn)行環(huán)境,和用戶輸入的數(shù)據(jù),通常被稱為自動(dòng)全局變量(autoglobals)或者超全局變量(superglobals)。
變量范圍這里的變量范圍指的是,它定義的上下文背景,也就是它的生效范圍。變量的范圍包含了include和require引入的文件。
PHP的全局變量和C語(yǔ)言有一點(diǎn)點(diǎn)不同,在C語(yǔ)言中,全局變量在函數(shù)中自動(dòng)生效,除非被局部變量覆蓋。PHP中全局變量在函數(shù)中使用時(shí)必須聲明為global。
b.inc內(nèi)容如下:
該程序能夠正常輸出hello,但是被注釋掉的test()不能正常解析,因?yàn)樽兞?a是未定義的。
使用全局變量若在某個(gè)函數(shù)中想使用全局變量,可以通過(guò)下面兩種方式。
global關(guān)鍵字
global $a, $b;在函數(shù)中聲明全局變量后,對(duì)任一變量的所有引用都會(huì)指向其全局版本。
$GLOBALS超全局變量數(shù)組
$GLOBALS["b"] = $GLOBALS["a"] + $BLOBALS["b"];用法同global關(guān)鍵字相似。
靜態(tài)變量靜態(tài)變量?jī)H在局部函數(shù)域中存在,但當(dāng)程序執(zhí)行離開(kāi)此作用域時(shí),其值并不丟失。并且,只在聲明時(shí)初始化一次,每次調(diào)用函數(shù)并不會(huì)覆蓋靜態(tài)函數(shù)的值。
靜態(tài)變量在聲明中用表達(dá)式的結(jié)果對(duì)其賦值會(huì)導(dǎo)致解析錯(cuò)誤,靜態(tài)聲明是在編譯時(shí)解析的。
和C語(yǔ)言的static相似,下面這段C代碼也可以把0~9十個(gè)數(shù)字依次輸出。
#includevoid test(void) { static int cnt = 0; printf("%d ", cnt); cnt++; if(cnt < 10) { test(); } cnt--; } int main(void) { test(); return 0; } 對(duì)于變量的static和global定義是以引用的方式實(shí)現(xiàn)的。
可變變量可變變量是PHP語(yǔ)言中的一種特殊用法,不知其他語(yǔ)言存不存在。
簡(jiǎn)而言之,可變變量就是,一個(gè)可變變量獲取了一個(gè)普通變量的值作為這個(gè)可變變量的變量名。
當(dāng)可變變量用于數(shù)組時(shí),可能會(huì)出現(xiàn)模棱兩可的問(wèn)題。比如,寫(xiě)下$$a[1],編譯器會(huì)報(bào)錯(cuò)的,你想要表達(dá)的意思需要用下面兩種方式替換掉。
${$a[1]}
$a[1]作為一個(gè)變量${$a}[1]
表單變量
$$a作為一個(gè)變量并取出變量中索引為1的值。當(dāng)表單提交給PHP腳本時(shí),表單中的信息自動(dòng)在腳本中可用,可以通過(guò)$_GET[]、$_POST[]和$_REQUEST[]訪問(wèn)。
注意,變量名中的點(diǎn)和空格被轉(zhuǎn)換成下劃線。例如變成了$_REQUEST["a_b"],下面的示例中展示了表單中標(biāo)識(shí)符的使用。
表單處理文件process.php。
因?yàn)榫潼c(diǎn)不是PHP變量名中的合法字符,輸出結(jié)果如下所示。
boolean false boolean false boolean true string "h3" (length=2)magic_quotes_gpc配置指令影響到get/post/cooie的值,這個(gè)特性已經(jīng)廢棄移除,輸入中的單引號(hào)、雙引號(hào)、反斜杠和NULL字符都不會(huì)被轉(zhuǎn)義。若需要轉(zhuǎn)義可使用addslashes(),若需要反引用一個(gè)引用的字符串需要使用stripslashes()。
PHP也懂得表單變量上下文中的數(shù)組,下面的例子使用了更復(fù)雜的表單變量,并將表單post給自己并在提交時(shí)顯示數(shù)據(jù)。
STR; echo $s; }在heredoc中含有復(fù)雜變量時(shí)要格外小心,上面這段代碼$_SERVER["PHP_SELF"]不加花括號(hào)會(huì)在運(yùn)行時(shí)報(bào)錯(cuò)。
array (size=4) "personal" => array (size=2) "name" => string "hello" (length=5) "detail" => string "world" (length=5) "option" => array (size=2) 0 => string "a" (length=1) 1 => string "c" (length=1) "action" => string "submitted" (length=9) "submit" => string "提交查詢內(nèi)容" (length=12)IMAGE提交當(dāng)提交表單時(shí),可以用一張圖片代替標(biāo)準(zhǔn)的提交按鈕。第一次使用,真的好神奇。
STR; echo $s; }對(duì)于上面這段程序,當(dāng)用戶點(diǎn)擊圖片某處時(shí),表單會(huì)傳送到服務(wù)器,并加上兩個(gè)變量sub_x和sub_y,包含了用戶點(diǎn)擊圖片的坐標(biāo)。
array (size=3) "action" => string "1" (length=1) "sub_x" => string "334" (length=3) "sub_y" => string "282" (length=3)cookiesPHP可以用setcookie()函數(shù)設(shè)定cookies,cookies是HTTP信息頭的一部分,因此必須在向?yàn)g覽器發(fā)送任何輸出之前調(diào)用。
cookie的相關(guān)使用如下所示。
cookie數(shù)據(jù)在相應(yīng)的cookie數(shù)組中可用,如果將多個(gè)值賦給一個(gè)cookie變量,必須將其賦成數(shù)組。
常量語(yǔ)法常量在腳本執(zhí)行期間其值不能改變。常量大小寫(xiě)敏感,傳統(tǒng)上常量標(biāo)識(shí)符總是大寫(xiě)。常量一旦定義就不能被重新定義或取消定義,常量的值只能是標(biāo)量。
可以用define()函數(shù)來(lái)定義常量,也可以使用const關(guān)鍵字在類定義之外定義常量。自定義常量不要以雙下劃線開(kāi)頭,可能會(huì)與魔術(shù)常量沖突。
define("FOO", "something"); const FOO = "something";使用const關(guān)鍵字定義常量必須處于最頂端的作用區(qū)域,因?yàn)橛么朔椒ㄊ窃诰幾g時(shí)定義的。常量的范圍是全局的,不用管作用區(qū)域,就可以在腳本的任何地方訪問(wèn)常量。
魔術(shù)常量魔術(shù)常量值能變,但它其實(shí)不是常量。
__LINE__ // 文件中的當(dāng)前行號(hào) __FILE__ // 文件的完整路徑和文件名,絕對(duì)路徑 __DIR__ // 文件所在的目錄,除非根目錄,否則不包括末尾斜杠,等價(jià)于dirname(__FILE__) __FUNCTION__ // 函數(shù)名稱,區(qū)分大小寫(xiě) __CLASS__ // 類的名稱,包括其被聲明的作用區(qū)域 __TRAIT__ // Trait的名字,包括其被聲明的作用區(qū)域 __METHOD__ // 類的方法名 __NAMESPACE__ // 當(dāng)前命名空間的名稱PHP向它運(yùn)行的任何腳本提供了大量的預(yù)定義常量,上面8個(gè)魔術(shù)常量的值隨著它們?cè)诖a中的位置改變而改變。
(全文完)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21112.html
摘要:最近計(jì)劃把手冊(cè),認(rèn)真的先過(guò)一遍。語(yǔ)言參考類型新認(rèn)知強(qiáng)制轉(zhuǎn)換類型用。后期靜態(tài)綁定從這里開(kāi)始語(yǔ)言參考生成器新認(rèn)知生成器汗水的核心是關(guān)鍵字。語(yǔ)言參考預(yù)定義變量超全局變量前一個(gè)錯(cuò)誤信息原始數(shù)據(jù)以上 showImg(https://segmentfault.com/img/remote/1460000010147451); 最近計(jì)劃把 PHP手冊(cè),認(rèn)真的先過(guò)一遍。記錄一些以前不知道,不明確的知識(shí)...
摘要:通過(guò)注冊(cè)自動(dòng)加載器,腳本引擎在出錯(cuò)失敗前有了最后一個(gè)機(jī)會(huì)加載所需的類構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)允行開(kāi)發(fā)者在一個(gè)類中定義一個(gè)方法作為構(gòu)造函數(shù)。析構(gòu)函數(shù)會(huì)在到某個(gè)對(duì)象的所有引用都被刪除或者當(dāng)對(duì)象被顯式銷毀時(shí)執(zhí)行抽象類支持抽象類和抽象方法。 語(yǔ)言參考 1. 類型 1.1 簡(jiǎn)介 showImg(https://segmentfault.com/img/bVbqlNJ?w=531&h=379);...
摘要:說(shuō)明這篇文章是我第一次認(rèn)真閱讀阿里巴巴開(kāi)發(fā)手冊(cè)終極版的筆記。說(shuō)明本手冊(cè)明確防止是調(diào)用者的責(zé)任。一年半載后,那么單元測(cè)試幾乎處于廢棄狀態(tài)。好的單元測(cè)試能夠最大限度地規(guī)避線上故障。 說(shuō)明 這篇文章是我第一次(認(rèn)真)閱讀《阿里巴巴 Java 開(kāi)發(fā)手冊(cè)(終極版)》的筆記。手冊(cè)本身對(duì)規(guī)范的講解已經(jīng)非常詳細(xì)了,如果你已經(jīng)有一定的開(kāi)發(fā)經(jīng)驗(yàn)并且有良好的編碼習(xí)慣和意識(shí),會(huì)發(fā)現(xiàn)大部分規(guī)范是符合常識(shí)的。所以...
摘要:與變量不同,常量不存在可變常量,如果常量名是動(dòng)態(tài)的,也可以用函數(shù)來(lái)獲取常量的值。執(zhí)行運(yùn)算符命令反引號(hào)。遞增遞減運(yùn)算符不影響布爾值。遞增遞減其他字符變量則無(wú)效,原字符串沒(méi)有變化。不允許用來(lái)檢測(cè)常量。 變量 基本 引用賦值 global 關(guān)鍵字 以下結(jié)果在命令行中有效,網(wǎng)頁(yè)php中請(qǐng)不要嘗試。。。都是坑。Example #1 使用 global或$GLOBALS 以下為網(wǎng)頁(yè)ph...
摘要:學(xué)習(xí)至今一年有余,筆記積累挺多的,也挺雜的,寫(xiě)篇文章整理一下吧?;A(chǔ)部分輸出文本的基礎(chǔ)指令和。函數(shù)內(nèi)部聲明的變量擁有作用域,只能在函數(shù)內(nèi)部進(jìn)行訪問(wèn)。布爾型要指定一個(gè)布爾值,使用關(guān)鍵字或。 php學(xué)習(xí)至今一年有余,筆記積累挺多的,也挺雜的,寫(xiě)篇文章整理一下吧。 php基礎(chǔ)部分 showImg(http://segmentfault.com/img/bVcWhR); PHP 輸出文本...
閱讀 1904·2021-11-22 09:34
閱讀 3042·2021-09-28 09:35
閱讀 13499·2021-09-09 11:34
閱讀 3608·2019-08-29 16:25
閱讀 2840·2019-08-29 15:23
閱讀 2051·2019-08-28 17:55
閱讀 2440·2019-08-26 17:04
閱讀 3056·2019-08-26 12:21