日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php之变量笔记

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

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

代碼舉例:

  • 變量以 $ 符號開頭,其后是變量的名稱
<?php $a = 1; $b = 2; $c = 3; echo $a+$b+$c; ?>

運行結果:

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

運行結果:

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

運行結果:

報錯內(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
  • 變量名稱只能包含字母數(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; ?>

運行結果:

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

運行結果:

1 2 3 4

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

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

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

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

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

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

運行結果:

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

注:你可以在不同的函數(shù)中創(chuàng)建名稱相同的局部變量,因為局部變量只能被在其中創(chuàng)建它的函數(shù)所識別

三、PHP global 關鍵詞

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

運行結果:

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

運行結果:

8 15

四、PHP static 關鍵詞

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

運行結果:

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

運行結果:

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

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

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

最后,結果就是:全局變量不要使用static關鍵字(個人理解),只對函數(shù)中的局部變量使用,因為局部變量不會自己更新變量值,函數(shù)運行后就會刪除變量與其值!!!

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

總結

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

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