PHP变量


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

静态变量

可变变量


变量定义

      PHP 中的变量用一个美元符号 $ 后面跟变量名来表示

常见预定义变量

  • $GLOBALS — 引用全局作用域中可用的全部变量
  • $_SERVER — 服务器和执行环境信息
  • $_GET — HTTP GET 变量
  • $_POST — HTTP POST 变量
  • $_FILES — HTTP 文件上传变量
  • $_REQUEST — HTTP Request 变量
  • $_SESSION — Session 变量
  • $_ENV — 环境变量
  • $_COOKIE — HTTP Cookies
  • $php_errormsg — 前一个错误信息
  • $HTTP_RAW_POST_DATA — 原生POST数据
  • $http_response_header — HTTP 响应头

以下预定义变量只在命令行执行的时候生效

  • $argc — 传递给脚本的参数数目
  • $argv — 传递给脚本的参数数组

命名规范

      变量名区分大小写,一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线

    // 非法变量名;以数字开头
     • $2set = '清清';   
    // 合法变量名;以下划线开头  
     • $_3set = '清清';    
     // 合法变量名;可以用中文
     • $x姓名x = 'name'; 

创建cetest17.php


 
 
  1. <?php
  2. $var1 = '小雨';
  3. $var2 = '小清';
  4. // 输出 小雨,小清
  5. echo "$var1, $var2\n";

执行结果:

 

传值

      变量默认总是传值赋值。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量

创建cetest18.php


 
 
  1. <?php
  2. $a = 'xiaoyu';
  3. $b = $a;
  4. $a = 'xiaoqing';
  5. var_dump($a,$b);

可以看到输出结果,说明传值赋值,不会因为原变量改变二改变:

引用

      PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量相当于原变量的别名,改动新的变量将影响到原始变量,反之亦然。

只有有名字的变量才可以引用赋值。例如,&(1 * 2) 为非法形式

创建cetest20.php


 
 
  1. <?php
  2. $a = 'a';
  3. $b = $$a;
  4. $c = &$a;
  5. $d = &$b;
  6. $a = 'x';
  7. var_dump($a,$b,$c,$d);

执行结果:

 

创建cetest19.php

用引用赋值,简单地将一个 & 符号加到将要赋值的变量前


 
 
  1. <?php
  2. $a = 'xiaoyu';
  3. $b = &$a;
  4. $a = 'xiaoqing';
  5. var_dump($a,$b);

执行结果:

 

变量范围

       变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件

例如,这里变量 $a 将会在包含文件 b.php 中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内:


 
 
  1. <?php
  2. $a = 1;
  3. include 'b.php';

 


 
 
  1. <?php
  2. $name = '小雨';
  3. $name1 = '小清';
  4. function doname()
  5. {
  6. echo $name;
  7. }
  8. function doname1($name1)
  9. {
  10. echo $name1;
  11. }
  12. doname();
  13. doname1($name1);

从返回结果中可以看出,函数要使用外部变量可以通过传参实现,此外还可以使用全局变量:

 

全局变量

   通过传参实现了函数调用外部变量声明全局变量有两种方法:

      第一种方法:

           global函数中声明了全局变量 a和b 之后,对任一变量的所有引用都会指向其全局版本。对于一个函数能够声明的全局变量的最大个数,PHP 没有限制。

       第二种方法:

             用特殊的 PHP 自定义 $GLOBALS 数组

      全局变量通常使用关键字 global 来声明

第一种方法:

创建cetest22.php


 
 
  1. <?php
  2. $a = 1;
  3. $b = 2;
  4. function sum()
  5. {
  6. // 在里面声明为全局变量
  7. global $a, $b;
  8. $b = $a + $b;
  9. }
  10. sum();
  11. echo "$b\n";

执行结果:

 

第二种方法:

创建cetest23.php


 
 
  1. <?php
  2. $a = 2;
  3. $b = 7;
  4. function sum()
  5. {
  6. $GLOBALS[ 'b'] = $GLOBALS[ 'a'] + $GLOBALS[ 'b'];
  7. }
  8. sum();
  9. echo "$b\n";

执行结果:

 

我们来把刚刚遗留的通过全局变量传参来实现输出打印

创建cetest24.php


 
 
  1. <?php
  2. $name = '小雨';
  3. $name1 = '小清';
  4. function doname()
  5. {
  6. global $name;
  7. echo "$name\n";
  8. }
  9. function doname1($name1)
  10. {
  11. global $name1;
  12. echo "$name1\n";
  13. }
  14. doname();
  15. doname1($name1);

 

静态变量

        变量范围的另一个重要特性是静态变量。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。


 
 
  1. <?php
  2. function test()
  3. {
  4. $a = 0;
  5. echo $a;
  6. $a++;
  7. }

        每次调用时都会将 a 的值设为 0 并输出 0。将变量加一的a的值设为0并输出0。将变量加一的a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。

       要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:


 
 
  1. 换行符
  2. unix系列用 \n
  3. windows系列用 \r\n
  4. mac用 \r
  5. PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性
  6. 如:
  7. <?php
  8. echo PHP_EOL;
  9. //windows平台相当于 echo "\r\n";
  10. //unix\linux平台相当于 echo "\n";
  11. //mac平台相当于 echo "\r";

创建cetest26.php


 
 
  1. <?php
  2. function test()
  3. {
  4. static $a = 0;
  5. echo $a.PHP_EOL;
  6. $a++;
  7. }
  8. test();
  9. test();

执行结果:

 

可变变量

        变量的变量名可以动态的设置和使用。

        动态设置了一个变量 $小雨,通常多个 $ 会依次从最后边开始解析,最后生成 $ 前一个值为名称的变量

创建cetest26.php


 
 
  1. <?php
  2. $a = '小雨';
  3. $$a = '小清';
  4. var_dump($a,$$a);

执行结果:

 

创建cetest27.php


 
 
  1. <?php
  2. $a = 'b';
  3. $b = 'c';
  4. $c = 'd';
  5. $$$$a = 'abc';
  6. var_dump($d);

执行结果:

 

参考链接:https://www.shiyanlou.com/courses/23


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值