国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP學習筆記之php變量用法

2024-05-04 21:57:33
字體:
來源:轉載
供稿:網友

變量是php編程中必不可少的一種東西了,在php中變量為分全局變量與私有變量,下面來分享我對php變量的一些了解與用法,大家可參考參考.

如果對于變量和常量的定義,你會注意幾個方面呢?你可能會想到:

•如何定義變量,它和C# 等語言有什么不同呢?

•變量區分大小寫嗎?

•PHP的變量還有其他重要的嗎?

•常量和變量的定義一樣嗎?

分別講述吧.

1.如何定義變量,它和C# 等語言有什么不同呢?

PHP 中的變量用一個美元符號后面跟變量名來表示.變量名是區分大小寫的.例如:

實例代碼如下:

  1. <?php  
  2.  $var='Jim'
  3.   $VAR='Kimi; 
  4.   echo "$var,$VAR";//輸出“Jim,Kimi" 
  5.  ?> 

你可能還關心變量的命名,其實和大多數語言一樣.

2. 變量區分大小寫嗎?

如 1里說的,區分大小寫.

注意,需要說明的一點是自PHP4以來,引入了引用賦值的概念,其實和多數語言的引用類似,不過我覺得最類似的是C/C++.因為它也用到了"&"符號.

實例代碼如下:

  1. <?php 
  2.  $foo = 'Bob';              // 賦值'Bob'給foo 
  3.  $bar = &$foo;              // 通過$bar引用.注意&符號 
  4.  $bar = "My name is $bar";  // 修改 $bar 
  5.  echo $bar
  6.  echo $foo;                // $foo 也修改了. 
  7.  ?> 

和其他語言一樣,只能對有變量名的變量才可以引用

php中的可變變量說白了,就是拿一個變量的值解析成一個變量名,去讀那個變量名的值.

實例代碼如下:

  1. <?php 
  2.     $a = "China";  //變量a 
  3.     $b = "a";       //變量b 
  4.     $China = "I'm Chinese !"//變量China 
  5.     $f = "b";  //變量f 
  6.      
  7.     echo $a."<br />";  //輸出 China 
  8.     echo $$a."<br />"//輸出 I'm Chinese  --這里像要當做可變變量解析,必須在前面多加一個$符號 
  9.     $a = "f";  //改變變量指向的名稱(這里就是可變變量的應用) 
  10.     echo $$a."<br />"//經過上面指向變量f后輸出 b 
  11.     $a = "b"//同上 
  12.     echo $$a."<br /><br />"//輸出 a 
  13.      
  14.     echo $b."<br />"//輸出 a 
  15.     echo $$b."<br />"//輸出 b 
  16.     echo $$$b."<br /><br />"//輸出 a 
  17.      
  18.     echo $f."<br />"//輸出 b 
  19.     echo $$f."<br />"//輸出 a 
  20.     echo $$$f."<br />"//輸出 b 
  21.     echo $$$$f."<br /><br />"//輸出 a 
  22.      
  23.     $$a = "China"//前面最后一個已經更改了變量為b所謂$$a=$b 也就是改變的$b的值 
  24.     echo $b."<br />"//輸出 China 
  25.     echo $$b//輸出 I'm Chinese 
  26. ?> 

注意:可變變量不能應用于$this和超全局變量 (php變量的作用域和其他高級編程語言有所不同.看代碼)

實例代碼如下:

  1. <?php  
  2.     $name = 'man';  
  3.     $$name = 'abc'//如果事先沒有man這個變量.就新建一個man變量. 然后把abc賦值過去 
  4.     $$$name = 'def'
  5.     echo $man."<br />"//輸出abc 
  6.     echo $abc//輸出def 
  7.      
  8.     echo "<br /> <hr />"
  9.     function show() 
  10.     { 
  11.         global $name//這里的global并不是設置為全局變量.而是引用 
  12.         echo $name."<br />";  //輸出man 
  13.     } 
  14.      
  15.     function showtwo() 
  16.     { 
  17.         //global $name; 
  18.         //echo $name."<br />"; 
  19.         echo $GLOBALS['name']; //超全局變量數組 
  20.     } 
  21.      
  22.     show();  
  23.     showtwo(); 
  24. ?> 

變量函數:

實例代碼如下:

  1. <?php 
  2.         function b() 
  3.         { 
  4.             echo "這是B";     
  5.         } 
  6.         function c($name = "China"//設默認值 
  7.          { 
  8.             echo "這是$name"
  9.         } 
  10.          
  11.         $a = 'b'
  12.         $a(); //找值所在的函數 
  13.          $a = 'c'
  14.         $a(); ?> 

可變變量的一個典型應用:

實例代碼如下:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <title>無標題文檔</title> 
  6. </head> 
  7. <body> 
  8.      
  9.     <div> 
  10.         <form action="#" method="post"
  11.             <label>name: </label> 
  12.             <input type="text" name="name" /><br /> 
  13.             <label>pwd : </label> 
  14.             <input type="text" name="pwd" /><br /> 
  15.             <label>tag : </label> 
  16.             <input type="text" name="tag" /><br /> 
  17.             <input type="submit" value="提交" /> 
  18.         </form> 
  19.     </div> 
  20. <?php 
  21.      
  22.         foreach($_POST as $key=>$value
  23.         {         
  24.             //print_r($_POST); 
  25.             $$key = $value
  26.         } 
  27.         //extract($_POST); //從數組中將變量導入到當前的符號表 --自行查找php手冊 
  28.         echo $name."<br />"
  29.         echo $pwd."<br />"
  30.         echo $tag."<br />"
  31.     ?> 
  32. </body> 
  33. </html> 

變量作用域 .

變量范圍

變量的范圍即它定義的上下文背景(譯者:說白了,也就是它的生效范圍).大部分的 PHP 變量只有一個單獨的范圍.這個單獨的范圍跨度同樣包含了 include 和 require 引入的文件.范例:

實例代碼如下:

  1. <?php 
  2. $a = 1; 
  3. include "b.inc"
  4. ?>  

這里變量 $a 將會在包含文件 b.inc 中生效.但是,在用戶自定義函數中,一個局部函數范圍將被引入.任何用于函數內部的變量按缺省情況將被限制在局部函數范圍內.范例:

實例代碼如下:

  1. <?php 
  2. $a = 1; /* global scope */ 
  3. function Test() 
  4.    echo $a/* reference to local scope variable */ 
  5. Test(); 
  6. ?>  

這個腳本不會有任何輸出,因為 echo 語句引用了一個局部版本的變量 $a,而且在這個范圍內,它并沒有被賦值.你可能注意到 PHP 的全局變量和 C 語言有一點點不同,在 C 語言中,全局變量在函數中自動生效,除非被局部變量覆蓋.這可能引起一些問題,有些人可能漫不經心的改變一個全局變量.PHP 中全局變量在函數中使用時必須申明為全局.

The global keyword

首先,一個使用 global 的例子:

例子1. 使用 global

實例代碼如下:

  1. <?php 
  2. $a = 1; 
  3. $b = 2; 
  4. function Sum() 
  5.    global $a$b
  6.    $b = $a + $b
  7. Sum(); 
  8. echo $b
  9. ?>   

以上腳本的輸出將是 "3".在函數中申明了全局變量 $a 和 $b,任何變量的所有引用變量都會指向到全局變量.對于一個函數能夠申明的全局變量的最大個數,PHP 沒有限制.

在全局范圍內訪問變量的第二個辦法,是用特殊的 PHP 自定義 $GLOBALS 數組.前面的例子可以寫成:

例子2. 使用 $GLOBALS 替代 global

實例代碼如下:

  1. <?php 
  2. $a = 1; 
  3. $b = 2; 
  4. function Sum() 
  5.    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; 
  6. Sum(); 
  7. echo $b
  8. ?>   

在 $GLOBALS 數組中,每一個變量為一個元素,鍵名對應變量名,值變量的內容.$GLOBALS 之所以在全局范圍內存在,是因為 $GLOBALS 是一個超全局變量.以下范例顯示了超全局變量的用處:

例子3. 演示超全局變量和作用域的例子

實例代碼如下:

  1. <?php 
  2. function test_global() 
  3.    // 大多數的預定義變量并不 "super",它們需要用 'global' 關鍵字來使它們在函數的本地區域中有效. 
  4.    global $HTTP_POST_VARS
  5.    print $HTTP_POST_VARS['name']; 
  6.    // Superglobals 在任何范圍內都有效,它們并不需要 'global' 聲明.Superglobals 是在 PHP 4.1.0 引入的. 
  7.    print $_POST['name']; 
  8. ?>   

使用靜態變量

變量范圍的另一個重要特性是靜態變量(static variable).靜態變量僅在局部函數域中存在,但當程序執行離開此作用域時,其值并不丟失.看看下面的例子:

例子4. 演示需要靜態變量的例子

實例代碼如下:

  1. <?php 
  2. function Test () 
  3.    $a = 0; 
  4.    echo $a
  5.    $a++; 
  6. ?>   

本函數沒什么用處,因為每次調用時都會將 $a 的值設為 0 并輸出 "0".將變量加一的 $a++ 沒有作用,因為一旦退出本函數則變量 $a 就不存在了.要寫一個不會丟失本次計數值的計數函數,要將變量 $a 定義為靜態的:

例子5. 使用靜態變量的例子

實例代碼如下:

現在,每次調用 Test() 函數都會輸出 $a 的值并加一.

靜態變量也提供了一種處理遞歸函數的方法.遞歸函數是一種調用自己的函數.寫遞歸函數時要小心,因為可能會無窮遞歸下去.必須確保有充分的方法來中止遞歸.一下這個簡單的函數遞歸計數到 10,使用靜態變量 $count 來判斷何時停止:

例子6. 靜態變量與遞歸函數

實例代碼如下:

  1. <?php 
  2. function Test() 
  3.    static $count = 0; 
  4.    $count++; 
  5.    echo $count
  6.    if ($count < 10) { 
  7.    Test (); 
  8.    } 
  9.    $count--; 
  10. ?>   

注: 靜態變量可以按照上面的例子聲明.如果在聲明中用表達式的結果對其賦值會導致解析錯誤.

例子7. 聲明靜態變量

實例代碼如下:

  1. <?php 
  2. function foo(){ 
  3.    static $int = 0; // correct 
  4.    static $int = 1+2; // wrong (as it is an expression) 
  5.    static $int = sqrt(121); // wrong (as it is an expression too) 
  6.    $int++; 
  7.    echo $int
  8. ?>  

全局和靜態變量的引用

在 Zend 引擎 1 代,驅動了 PHP4,對于變量的 static 和 global 定義是以 references 的方式實現的.例如,在一個函數域內部用 global 語句導入的一個真正的全局變量實際上是建立了一個到全局變量的引用.這有可能導致預料之外的行為,如以下例子所演示的:

實例代碼如下:

  1. <?php 
  2. function test_global_ref() { 
  3.    global $obj
  4.    $obj = &new stdclass; 
  5. function test_global_noref() { 
  6.    global $obj
  7.    $obj = new stdclass; 
  8. test_global_ref(); 
  9. var_dump($obj); 
  10. test_global_noref(); 
  11. var_dump($obj); 
  12. ?>  

執行以上例子會導致如下輸出:

NULLobject(stdClass)(0) {}類似的行為也適用于 static 語句.引用并不是靜態地存儲的:

實例代碼如下:

  1. <?php 
  2. function &get_instance_ref() { 
  3.    static $obj
  4.    echo "Static object: "
  5.    var_dump($obj); 
  6.    if (!isset($obj)) { 
  7.    // 將一個引用賦值給靜態變量 
  8.    $obj = &new stdclass; 
  9.    } 
  10.    $obj->property++; 
  11.    return $obj
  12. function &get_instance_noref() { 
  13.    static $obj
  14.    echo "Static object: "
  15.    var_dump($obj); 
  16.    if (!isset($obj)) { 
  17.    // 將一個對象賦值給靜態變量 
  18.    $obj = new stdclass; 
  19.    } 
  20.    $obj->property++; 
  21.    return $obj
  22. $obj1 = get_instance_ref(); 
  23. $still_obj1 = get_instance_ref(); 
  24. echo "/n"
  25. $obj2 = get_instance_noref(); 
  26. $still_obj2 = get_instance_noref(); 
  27. ?>  

執行以上例子會導致如下輸出:

Static object: NULLStatic object: NULLStatic object: NULLStatic object: object(stdClass)(1) {  ["property"]=>  int(1)}

上例演示了當把一個引用賦值給一個靜態變量時,第二次調用 &get_instance_ref() 函數時其值并沒有被記住

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 公主岭市| 资源县| 扎赉特旗| 天台县| 南康市| 中牟县| 汉中市| 丽江市| 饶河县| 兴文县| 专栏| 景德镇市| 东乡族自治县| 正定县| 枣强县| 三都| 桑日县| 舒兰市| 高尔夫| 元谋县| 宝应县| 麦盖提县| 北海市| 丽江市| 莫力| 澄迈县| 陵川县| 临澧县| 措美县| 西昌市| 泽库县| 江津市| 德江县| 林周县| 上蔡县| 汾西县| 广东省| 天津市| 新宁县| 蒙山县| 自治县|