官术网_书友最值得收藏!

2.6 變量

變量與常量正好相反,它存放的是可變的數據,即在程序執行過程中變量的值可以發生變化。

2.6.1 聲明和使用變量

在聲明變量時,系統會為程序中的每一個變量分配一個存儲單元。這些變量都使用“變量名”來標識,即變量名實質上就是計算機內存單元的名稱,因此通過變量名即可訪問內存中的數據。

在PHP中,使用變量之前并不需要進行聲明,即只需要為變量賦值,而PHP的變量名用“$”和標識符表示,并且區分大小寫。

注意:變量名的標識符不能以數字字符開頭,也不能以字母和下劃線以外的其他字符開頭。

變量賦值就是給變量一個具體的數據值,通常通過賦值運算符實現。在PHP中,為變量賦值的方法有三種。

(1)直接賦值:直接將數據值賦值給變量。

(2)變量間賦值:將一個變量的數據值賦值給另一個變量。

(3)引用賦值:使用符號“&”將一個變量的內存地址傳給另一個變量,即再為該內存中的數據起一個“別名”。當改變其中一個變量的值時,另一個變量也會隨之發生變化。

說明:變量間賦值和引用賦值之間的區別在于,變量間賦值是開辟一個新的內存空間,并復制原變量內容;引用賦值是給原變量內容另起一個變量名,二者使用的是同一內存空間。

【實例2-24(26_Variable.php)】 定義一個值為str1的變量$str1,然后將該變量的值賦值給另一個變量$str2,再將該變量引用給另一個變量$str3,最后輸出結果。實例代碼如下。

<?php
  //設置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $str1 = 'str1';    //直接賦值     
  echo '$str1的值:'.$str1.'<br/>';  //顯示結果
  $str2 = $str1;      //變量間賦值
  echo '$str2的值:'.$str2.'<br/>';  //顯示結果
  $str3 = & $str1;    //引用賦值
  echo '$str3的值:'.$str3.'<br/>';  //顯示結果
  $str1 = 'str2';    //修改變量的值
  echo '$str1的值:'.$str1.'<br/>';  //顯示結果
  echo '$str2的值:'.$str2.'<br/>';  //顯示結果
  echo '$str3的值:'.$str3;          //顯示結果
?>

運行結果如圖2-24所示。

2d24

圖2-24 變量的賦值

2.6.2 變量的作用域

變量的作用域是指能夠使用變量的有效范圍。變量必須在其有效范圍內使用,否則就會失去其意義。在PHP中,變量的作用域有三種。

p51-1

【局部變量和全局變量】

(1)局部變量:變量定義在函數內部,其作用域為所在函數。

注意:局部變量在函數調用結束以后,其存儲的數據會被立即清除,內存空間也會被釋放。

(2)全局變量:變量定義在所有函數以外,其作用域為整個PHP文件。

注意:如果需要在自定義函數內部使用全局變量,那么要使用關鍵字global在調用全局變量時進行聲明。

(3)靜態變量:能夠在函數調用結束之后保留變量值,當再次回到其作用域時,可以繼續使用保留的變量值。

p51-2

【靜態變量】

注意:靜態變量需要使用關鍵字static進行聲明。

【實例2-25(27_Scope.php)】 在函數內外定義并輸出變量名相同的局部變量“局部變量:調用函數時輸出。”和全局變量“全局變量:在函數以外輸出。”。實例代碼如下。

<?php
  //設置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個全局變量
  $str = '全局變量:在函數以外輸出。';
  //定義一個自定義函數
  function example()
  {
    //定義一個局部變量
    $str = '局部變量:調用函數時輸出。';
    echo $str.'<br/>';  //顯示結果
  }
  example();             //調用函數
  echo $str;             //顯示結果
?>

運行結果如圖2-25所示。

2d25

圖2-25 變量的作用域

【實例2-26(28_Global_Variable.php)】 在自定義函數內使用并輸出值為“全局變量”的全局變量。實例代碼如下。

<?php
  //設置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $str = '全局變量';  //定義一個全局變量    
  //定義一個自定義函數
  function example()
  {
    echo '直接使用全局變量:'.$str.'<br/>';  //顯示結果
    global $str;  //使用關鍵字global調用全局變量
    echo '通過global使用全局變量:'.$str;    //顯示結果
  }
  example();       //調用函數
?>

運行結果如圖2-26所示。

2d26

圖2-26 全局變量

【實例2-27(29_Static_Variable.php)】 分別使用普通變量和靜態變量在自定義函數中輸出遞增數字。實例代碼如下。

<?php
  //設置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個自定義函數
  function example1()
  {
    $num = 0;        //定義一個普通變量
    $num++;             //遞增
    echo $num.' ';      //顯示結果
  }
  //定義一個自定義函數
  function example2()
  {
    static $num = 0;    //定義一個靜態變量
    $num++;             //遞增
    echo $num.' ';      //顯示結果
  }
  echo'普通變量輸出:';     //顯示結果
  //循環10次
  for ($i = 0; $i < 10; $i++)
  {
    example1();          //調用函數
  }
  echo'<br/>靜態變量輸出:'; //顯示結果
  //循環10次
  for ($i = 0; $i < 10; $i++)
  {
    example2();         //調用函數
  }
?>

運行結果如圖2-27所示。

2d27

圖2-27 靜態變量

2.6.3 可變變量

可變變量是一種非常特殊的變量。它允許動態地改變一個變量的名稱,即可變變量的名稱由另一個變量的值來確定。

p54

【可變變量】

在PHP中,在變量的前面再加上符號“$”即可實現可變變量。

【實例2-28(30_Variable_Variable.php)】 定義并輸出一個值為“可變變量”的可變變量。實例代碼如下。

<?php
  //設置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $str1 = 'str2';     //定義一個字符串型變量
  $str2 ='可變變量';    //定義一個字符串型變量
  echo '$str1的值:'.$str1.'<br/>';   //顯示結果
  echo '$str2的值:'.$$str1.'<br/>';  //顯示結果
?>

運行結果如圖2-28所示。

2d28

圖2-28 可變變量

說明:$$str1為可變變量,在執行時,首先將$str1解析為值str2,然后解析$str2,最后將值輸出。

2.6.4 預定義變量

在PHP中,除了可以使用自定義變量外,還可以使用預定義變量來獲取用戶會話、用戶操作系統環境和本地操作系統環境等信息。常用的預定義變量見表2-3。

表2-3 常用的預定義變量

048-i
049-i
主站蜘蛛池模板: 德江县| 册亨县| 天祝| 遵化市| 贵州省| 大石桥市| 眉山市| 加查县| 迁安市| 林口县| 荣昌县| 深泽县| 瑞金市| 崇左市| 清苑县| 灌云县| 金湖县| 汾西县| 贡山| 元氏县| 房产| 称多县| 阳原县| 峨眉山市| 晴隆县| 合作市| 永靖县| 临夏县| 辽中县| 东明县| 湄潭县| 登封市| 景德镇市| 东丰县| 广丰县| 峡江县| 红桥区| 蓝田县| 兴仁县| 清水河县| 渭源县|