最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • PHP学习笔记之php变量用法

    变量是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() 函数时其值并没有被记住

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » PHP学习笔记之php变量用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级