日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

php之变量笔记

發(fā)布時(shí)間:2023/12/31 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php之变量笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、PHP 變量規(guī)則:
變量以 $ 符號(hào)開(kāi)頭,其后是變量的名稱(chēng)
變量名稱(chēng)必須以字母或下劃線開(kāi)頭
變量名稱(chēng)不能以數(shù)字開(kāi)頭
變量名稱(chēng)只能包含字母數(shù)字字符和下劃線(A-z、0-9 以及 _)
變量名稱(chēng)對(duì)大小寫(xiě)敏感($y 與 $Y 是兩個(gè)不同的變量)

代碼舉例:

  • 變量以 $ 符號(hào)開(kāi)頭,其后是變量的名稱(chēng)
<?php $a = 1; $b = 2; $c = 3; echo $a+$b+$c; ?>

運(yùn)行結(jié)果:

6
  • 變量名稱(chēng)必須以字母或下劃線開(kāi)頭
<?php $a = 1; $_ = 2; $_a = 3; echo $a."<br/>"; echo $_."<br/>"; echo $_a; ?>

運(yùn)行結(jié)果:

1 2 3
  • 變量名稱(chēng)不能以數(shù)字開(kāi)頭
<?php $1 = 2; ?>

運(yùn)行結(jié)果:

報(bào)錯(cuò)內(nèi)容: Parse error: syntax error, unexpected '1' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$' in F:\xampp\htdocs\test\phptest.php on line 2
  • 變量名稱(chēng)只能包含字母數(shù)字字符和下劃線(A-z、0-9 以及 _)
<?php $a = 1; $a1 = 2; $_a = 3; $_1 = 4; $a_1 = 5; echo $a."<br/>"; echo $a1."<br/>"; echo $_a."<br/>"; echo $_1."<br/>"; echo $a_1; ?>

運(yùn)行結(jié)果:

1 2 3 4 5
  • 變量名稱(chēng)對(duì)大小寫(xiě)敏感($y 與 $Y 是兩個(gè)不同的變量)
<?php $a = 1; $A = 2; $ab = 3; $AB = 4; echo $a."<br/>"; echo $A."<br/>"; echo $ab."<br/>"; echo $AB; ?>

運(yùn)行結(jié)果:

1 2 3 4

注:以上的舉例中,我們不需要聲明變量的數(shù)據(jù)類(lèi)型,php會(huì)根據(jù)變量的值,自動(dòng)把變量轉(zhuǎn)換為正確的數(shù)據(jù)類(lèi)型

二、php變量作用域
在 PHP中,可以在腳本的任意位置對(duì)變量進(jìn)行聲明。
變量的作用域指的是變量能夠被引用/使用的那部分腳本(就是那部分腳本中包含局部變量,全局變量或靜態(tài)變量就叫做變量的作用域)

PHP 有三種不同的變量作用域:

  • local(局部)
  • global(全局)
  • static(靜態(tài))

Local 和 Global 作用域:
函數(shù)之外聲明的變量擁有 Global 作用域,只能在函數(shù)以外進(jìn)行訪問(wèn)。
函數(shù)內(nèi)部聲明的變量擁有 LOCAL 作用域,只能在函數(shù)內(nèi)部進(jìn)行訪問(wèn)。
下面的例子測(cè)試了帶有局部和全局作用域的變量:

<?php $x=5; // 全局作用域function myTest() {$y=10; // 局部作用域echo "<p>測(cè)試函數(shù)內(nèi)部的變量:</p>";echo "變量 x 是:$x"; //因?yàn)?x是在函數(shù)myTest外部聲明的變量,所以$x只能在函數(shù)外訪問(wèn)到echo "<br/>"; //換行echo "變量 y 是:$y"; //因?yàn)?y是在函數(shù)myTest內(nèi)部聲明的變量,所以$y只能在函數(shù)內(nèi)訪問(wèn)到 } myTest(); // 運(yùn)行myTest函數(shù)echo "<p>測(cè)試函數(shù)之外的變量:</p>"; echo "變量 x 是:$x"; //因?yàn)?x是在函數(shù)myTest外部聲明的變量,所以$x只能在函數(shù)外訪問(wèn)到 echo "<br/>"; //換行 echo "變量 y 是:$y"; //因?yàn)?y是在函數(shù)myTest內(nèi)部聲明的變量,所以$y只能在函數(shù)內(nèi)訪問(wèn)到 ?>

運(yùn)行結(jié)果:

測(cè)試函數(shù)內(nèi)部的變量:Notice: Undefined variable: x in F:\xampp\htdocs\test\phptest.php on line 7 變量 x 是: 變量 y 是:10 測(cè)試函數(shù)之外的變量:變量 x 是:5Notice: Undefined variable: y in F:\xampp\htdocs\test\phptest.php on line 17 變量 y 是:

注:你可以在不同的函數(shù)中創(chuàng)建名稱(chēng)相同的局部變量,因?yàn)榫植孔兞恐荒鼙辉谄渲袆?chuàng)建它的函數(shù)所識(shí)別

三、PHP global 關(guān)鍵詞

  • global 關(guān)鍵詞用于在函數(shù)內(nèi)訪問(wèn)全局變量
    要做到這一點(diǎn),請(qǐng)?jiān)?#xff08;函數(shù)內(nèi)部)變量前面使用 global 關(guān)鍵詞:
<?php $x=5; //聲明一個(gè)$x變量,給它賦值5 $y=10; //聲明一個(gè)$y變量,給它賦值10function myTest() { //創(chuàng)建一個(gè)myTest函數(shù)global $x,$y; //使用global關(guān)鍵詞,使函數(shù)內(nèi)部可以使用$x與$y變量$y=$x+$y; //計(jì)算$y=5+10,即最后$y=15 }myTest(); //執(zhí)行myTest函數(shù) echo $y; //輸出15 ?>

運(yùn)行結(jié)果:

15
  • PHP 同時(shí)在名為 $GLOBALS[index] 的數(shù)組中存儲(chǔ)了所有創(chuàng)建的全局變量。下標(biāo)存有變量名。這個(gè)數(shù)組在函數(shù)內(nèi)也可以訪問(wèn),并能夠用于直接更新全局變量
    舉例:
<?php $x=5; //聲明一個(gè)變量x,賦值為5 $y=10; //聲明一個(gè)變量y,賦值為10function myTest() { //定義一個(gè)myTest函數(shù)$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; //直接在函數(shù)內(nèi)部使用全局變量,不需要再global關(guān)鍵詞$GLOBALS['x']=8; //在函數(shù)內(nèi)部把全局變量$x重新賦值8(驗(yàn)證函數(shù)內(nèi)部是否可以直接更新全局變量) } myTest(); //執(zhí)行myTest函數(shù) echo $x; //輸出為8,表明更新成功,這里更新是在$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']之后更新的,所以當(dāng)時(shí)的$x還是=5 echo "<br/>"; //換行 echo $y; //輸出為15 ?>

運(yùn)行結(jié)果:

8 15

四、PHP static 關(guān)鍵詞

  • 通常,當(dāng)函數(shù)完成/執(zhí)行后,會(huì)刪除所有變量與它的值。不過(guò),有時(shí)我需要不刪除某個(gè)局部變量,要完成這一點(diǎn),請(qǐng)?jiān)谀状温暶髯兞繒r(shí)使用 static 關(guān)鍵詞:
    然后,每當(dāng)函數(shù)被調(diào)用時(shí),這個(gè)局部變量所存儲(chǔ)的信息都是函數(shù)最后一次被調(diào)用時(shí)所包含的信息
<?php $x=0; echo $x."<br/>"; //輸出變量值為0 注:變量換行可以使用echo $x."<br/>"或echo "<br/>" $x++; //在$x變量現(xiàn)有值的基礎(chǔ)上+1 echo $x; //輸出變量值為$x=0+1.結(jié)果為1 echo "<br/>"; $x++; //輸出變量值$x=1+1,結(jié)果為2 echo $x."<br/>"."<br/>";function myTest() { //定義一個(gè)myTest函數(shù)static $y=1; //使用static關(guān)鍵詞echo $y; //輸出變量$y的值$y++; //在變量$y現(xiàn)有值的基礎(chǔ)上+1 }myTest(); //執(zhí)行第一次myTest函數(shù),使用了static關(guān)鍵詞,并為$y賦值1,所以輸出$y的結(jié)果為1,之后執(zhí)行$y++,因此$y=1+1,$y變?yōu)?,此時(shí)myTest函數(shù)運(yùn)行結(jié)束,本該刪除局部變量$y與其值,但因?yàn)槭褂昧藄tatic關(guān)鍵詞,所以不刪除局部變量$y與其值,所以此時(shí)$y已經(jīng)變成了2,也就是static $y=2啦 echo "<br/>"; //函數(shù)執(zhí)行換行必須使用echo "<br/>",使用myTest()."<br/>"無(wú)法換行 myTest(); //執(zhí)行第二次myTest函數(shù),因?yàn)槭褂昧藄tatic關(guān)鍵詞,第一次函數(shù)執(zhí)行后,static $y被賦值了2,所以輸出$y的結(jié)果為2,之后執(zhí)行$y++,此時(shí)$y已經(jīng)變成了3 echo "<br/>"; myTest(); //執(zhí)行第三次myTest函數(shù),因?yàn)槭褂昧藄tatic關(guān)鍵詞,第二次函數(shù)執(zhí)行后,static $y被賦值了3,所以輸出$y的結(jié)果為3,之后執(zhí)行$y++,此時(shí)$y已經(jīng)變成了4 echo "<br/>"; myTest(); //執(zhí)行第四次myTest函數(shù),因?yàn)槭褂昧藄tatic關(guān)鍵詞,第三次函數(shù)執(zhí)行后,static $y被賦值了4,所以輸出$y的結(jié)果為4,之后執(zhí)行$y++,此時(shí)$y已經(jīng)變成了5 echo "<br/>"; myTest(); //執(zhí)行第五次myTest函數(shù),因?yàn)槭褂昧藄tatic關(guān)鍵詞,第四次函數(shù)執(zhí)行后,static $y被賦值了5,所以輸出$y的結(jié)果為5,之后執(zhí)行$y++,此時(shí)$y已經(jīng)變成了6,但是下面沒(méi)有myTest函數(shù)再運(yùn)行了,所以也就顯示到5,但此時(shí)的static $y=6,你再執(zhí)行一次myTest,就會(huì)輸出6,接下來(lái)的流程就和上面幾次的函數(shù)執(zhí)行一樣啦~ echo "<br/>"; ?>

運(yùn)行結(jié)果:

0 1 21 2 3 4 5
  • 如果函數(shù)內(nèi)的局部變量不使用static關(guān)鍵字,會(huì)是什么樣呢?
<?php function myTest() { //定義一個(gè)myTest函數(shù)$y=1; //不使用使用static關(guān)鍵詞echo $y; //輸出變量$y的值$y++; //在變量$y現(xiàn)有值的基礎(chǔ)上+1 }myTest(); //執(zhí)行第一次函數(shù),首先執(zhí)行第三行代碼,局部變量$y賦值1,之后輸出$y=1,再加1,因?yàn)槭蔷植孔兞?#xff0c;不進(jìn)行$y更新,直接完成myTest函數(shù),刪除$y變量與其值(刪除了$y也就相當(dāng)于刪除了值) echo "<br/>"; myTest(); //執(zhí)行第二次函數(shù),首先執(zhí)行第三行代碼,因?yàn)榈谝淮魏瘮?shù)的執(zhí)行完成后直接刪除了局部變量$y和其值,所以重新聲明并賦值1,之后輸出$y=1,再加1,因?yàn)槭蔷植孔兞?#xff0c;不進(jìn)行$y更新,直接完成myTest函數(shù),刪除$y變量與其值(刪除了$y也就相當(dāng)于刪除了值)

運(yùn)行結(jié)果:

1 1
  • 代碼測(cè)試段,看看全局變量是否可以使用static關(guān)鍵詞:
<?php //static $y=0; //在全局變量作用域使用static關(guān)鍵詞 //$y=0; //在全局變量作用域不使用static關(guān)鍵詞 #以上注釋的兩行代碼每次測(cè)試二選一(選取一行取消注釋)進(jìn)行測(cè)試 function myTest() { //定義一個(gè)myTest函數(shù)echo $GLOBALS['y']; //這里輸出全局變量$y$GLOBALS['y']++; //這里把更新全局變量$y,使它+1,就是函數(shù)外面的全局變量$y+1,變成了一個(gè)新的數(shù)值 }myTest(); //執(zhí)行第一次函數(shù),首先執(zhí)行第六行代碼,輸出全局變量$y=0,再加1,因?yàn)槭褂玫氖?GLOBALS[],所以更新全局變量$y,此時(shí)$y=1 echo "<br/>"; myTest(); //執(zhí)行第二次函數(shù),首先執(zhí)行第六行代碼,因?yàn)榈谝淮蔚暮瘮?shù)執(zhí)行,全局變量$y變成了1,所以輸出全局變量$y=1,再加1,因?yàn)槭褂玫氖?GLOBALS[],所以更新全局變量$y,此時(shí)$y=2 echo "<br/>"; myTest(); //執(zhí)行第三次函數(shù),首先執(zhí)行第六行代碼,因?yàn)榈诙蔚暮瘮?shù)執(zhí)行,全局變量$y變成了2,所以輸出全局變量$y=2,再加1,因?yàn)槭褂玫氖?GLOBALS[],所以更新全局變量$y,此時(shí)$y=3 echo "<br/>"; myTest(); //執(zhí)行第四次函數(shù),首先執(zhí)行第六行代碼,因?yàn)榈谌蔚暮瘮?shù)執(zhí)行,全局變量$y變成了3,所以輸出全局變量$y=3,再加1,因?yàn)槭褂玫氖?GLOBALS[],所以更新全局變量$y,此時(shí)$y=4 echo "<br/>"; myTest(); //執(zhí)行第五次函數(shù),首先執(zhí)行第六行代碼,因?yàn)榈谒拇蔚暮瘮?shù)執(zhí)行,全局變量$y變成了4,所以輸出全局變量$y=4,再加1,因?yàn)槭褂玫氖?GLOBALS[],所以更新全局變量$y,此時(shí)$y=5 echo "<br/>";

以上注釋的兩行代碼先使用第二行代碼,之后注釋第一行代碼,選用第三行代碼,運(yùn)行結(jié)果都是一樣的,為什么呢?
因?yàn)?#xff0c;不管全局變量使沒(méi)使用static關(guān)鍵詞,函數(shù)里的$GLOBALS[]都會(huì)更新全局變量$y,使函數(shù)外的全局變量$y變成一個(gè)新值。(也就是說(shuō)雖然myTest函數(shù)完成后會(huì)刪除函數(shù)內(nèi)部的的所有變量與其值,但是它的值已經(jīng)被$GLOBALS[]更新,一個(gè)新值已經(jīng)賦給了全局變量$y,它又不會(huì)刪除,就這樣依次循環(huán)啦)

有人就要問(wèn)了,為什么不在函數(shù)內(nèi)使用全局變量$y,請(qǐng)問(wèn),如果使用了全局變量$y,不使用$GLOBALS[],你在函數(shù)內(nèi)可以獲得全局變量嗎!!!
所以,雖然static關(guān)鍵字可以在函數(shù)外(在全局變量上使用),但最終的運(yùn)行結(jié)果跟它是沒(méi)有關(guān)系的(因?yàn)楹瘮?shù)里的$GLOBALS[]更新了全局變量$y,還要static有啥用…),所以全局變量使不使用static關(guān)鍵字,都無(wú)所謂

最后,結(jié)果就是:全局變量不要使用static關(guān)鍵字(個(gè)人理解),只對(duì)函數(shù)中的局部變量使用,因?yàn)榫植孔兞坎粫?huì)自己更新變量值,函數(shù)運(yùn)行后就會(huì)刪除變量與其值!!!

注:筆記總結(jié)于 http://www.w3school.com.cn/php/php_variables.asp

總結(jié)

以上是生活随笔為你收集整理的php之变量笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。