多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > PHP學習筆記之php變量用法

PHP學習筆記之php變量用法

來源:程序員人生   發(fā)布時間:2013-11-11 20:20:40 閱讀次數(shù):3173次

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

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

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

•變量區(qū)分大小寫嗎?

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

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

分別講述吧.

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

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

實例代碼如下:

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

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

2. 變量區(qū)分大小寫嗎?

如 1里說的,區(qū)分大小寫.

注意,需要說明的一點是自PHP4以來,引入了引用賦值的概念,其實和多數(shù)語言的引用類似,不過我覺得最類似的是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 />"//經(jīng)過上面指向變量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"//前面最后一個已經(jīng)更改了變量為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']; //超全局變量數(shù)組 
  20.     } 
  21.      
  22.     show();  
  23.     showtwo(); 
  24. ?> 

變量函數(shù):

實例代碼如下:

  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(); //找值所在的函數(shù) 
  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); //從數(shù)組中將變量導入到當前的符號表 --自行查找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 中生效.但是,在用戶自定義函數(shù)中,一個局部函數(shù)范圍將被引入.任何用于函數(shù)內部的變量按缺省情況將被限制在局部函數(shù)范圍內.范例:

實例代碼如下:

  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 語言中,全局變量在函數(shù)中自動生效,除非被局部變量覆蓋.這可能引起一些問題,有些人可能漫不經(jīng)心的改變一個全局變量.PHP 中全局變量在函數(shù)中使用時必須申明為全局.

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".在函數(shù)中申明了全局變量 $a 和 $b,任何變量的所有引用變量都會指向到全局變量.對于一個函數(shù)能夠申明的全局變量的最大個數(shù),PHP 沒有限制.

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

例子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 數(shù)組中,每一個變量為一個元素,鍵名對應變量名,值變量的內容.$GLOBALS 之所以在全局范圍內存在,是因為 $GLOBALS 是一個超全局變量.以下范例顯示了超全局變量的用處:

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

實例代碼如下:

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

使用靜態(tài)變量

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

例子4. 演示需要靜態(tài)變量的例子

實例代碼如下:

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

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

例子5. 使用靜態(tài)變量的例子

實例代碼如下:

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

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

例子6. 靜態(tài)變量與遞歸函數(shù)

實例代碼如下:

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

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

例子7. 聲明靜態(tài)變量

實例代碼如下:

  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. ?>  

全局和靜態(tài)變量的引用

在 Zend 引擎 1 代,驅動了 PHP4,對于變量的 static 和 global 定義是以 references 的方式實現(xiàn)的.例如,在一個函數(shù)域內部用 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. ?>  

執(zhí)行以上例子會導致如下輸出:

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

實例代碼如下:

  1. <?php 
  2. function &get_instance_ref() { 
  3.    static $obj
  4.    echo "Static object: "
  5.    var_dump($obj); 
  6.    if (!isset($obj)) { 
  7.    // 將一個引用賦值給靜態(tài)變量 
  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.    // 將一個對象賦值給靜態(tài)變量 
  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. ?>  

執(zhí)行以上例子會導致如下輸出:

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

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

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国内精品一区二区三区 | 一区二区国产在线播放 | 欧美日本一区 | 一级毛片www| 亚洲成年人在线 | 亚欧成人 | 国产乱码精品一区二区三区卡 | 高清视频 一区二区三区四区 | 男女羞羞视频网站 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 成人久久久 | www日本视频| 亚洲欧美综合色区小说 | 日本动漫免费看 | 最近的最新的中文字幕在线 | 女人18一级毛片免费观看 | 成人欧美日韩高清不卡 | 波多野结衣中文字幕在线 | 国产精品免费视频一区二区 | 国产亚洲精品久久久久91网站 | 亚洲精品一区二区三区中文字幕 | 羞羞免费网页登界面入口 | 欧美激情亚洲一区中文字幕 | 正在播放国产精品放孕妇 | 欧美成人全部免费观看1314色 | 成人在线不卡视频 | 亚洲欧美日韩网站 | 欧美高清视频一区 | 日本欧美不卡一区二区三区在线 | 日本免费一区二区三区最新vr | a毛片免费播放全部完整 | 中文字幕网址 | 特级做a爰片毛片免费看一区 | 免费一级大毛片a一观看不卡 | 成人a毛片久久免费播放 | 尤物视频最新网址 | 边摸边吃奶边做3p视频 | 欧美色阁 | 视频一区色眯眯视频在线 | 日韩视频一区 | 在线观看www日本免费网站 |