PHP中变量的声明、作用范围和解析规则

1. 什么是变量
变量即可以变化的量,在脚本执行期间可以变化的量,变量的作用是保存值。

2. 声明变量

PHP 中的变量,用一个美元符号 $ 后面紧跟变量名(变量标识符)来表示。变量名是区分大小写的。

变量名可以由字母、数字和下划线组成,且必须以字母或下划线开头。
如:
$userId = 1;
$a = $b = $c = 'lily';
变量名最好含义明确,且最好遵循小驼峰标记法。如:$firstName = 'jack';
同一个作用域中,变量重名时,后面的值会覆盖前面的值。
注意:$this是一个特殊的变量,它不能被赋值。
给一个变量赋值,有两种方式:
传值赋值:此种方式下,当一个变量的值赋给另外一个变量时,改变其中一个变量的值,并不会影响另外一个变量。
$a = 32;
$b = $a;
引用赋值:此种方式下,新变量引用了原始变量,它们互为别名,指向了同一个存储空间。因此,改变其中任何一个变量的值,另外一个变量的值也会跟着改变。
$a = 32;
$b = &$a;   // 在源变量的前面加一个地址符 & 表示引用赋值

3. 变量的作用范围
变量的作为范围(作用域),即变量起作用(生效)的范围。
按照变量的作用范围,可以把变量分为局部变量和全局变量。
  • 局部变量:函数内部声明的变量,只在函数内部可见(生效)。
  • 全局变量:函数外部声明的变量,从变量声明处到脚本文件末尾处(包括后面加载的其他文件)都可见,但在函数内部却是不可见的(这一点和C语言不同)。
<?php 
$a = 36;    // 全局变量
function test(){
    echo $a;    // 局部变量,只会在函数内部寻找
}
test();
echo $a;
?>
要想让全局变量在函数内部也可见,可以在函数内部,用关键字 global 将其声明为全局变量;同样地,要想让局部变量在函数外部也可见,也是这样操作,即用 global 声明后的变量,在函数外部也可见。
<?php 
$a = 36;    // 全局变量
function test(){
    global $a;    // 声明为全局变量
    echo $a;
    $a = 45;
}
test();
echo $a;
?>

还有另外一种特殊的变量,静态变量, 用关键字 static 声明,它仅存在于函数中,作用域为函数内部,但脚本执行过程中,当程序执行到离开作用域时,它的值并不会丢失,初始化语句仅执行第一次。
<?php 
function test()
{
    static $a = 0;    // 声明静态变量,并赋初始值
    echo $a;
    $a++;
}
test();
test();
?>
静态变量一般用于函数执行次数的计数器。

4. 可变变量
可变变量也叫动态变量,可变标量的变量名是可以动态设置的。
<?php 
$a = 'hello';
$$a = 'world';    // 可变变量,变量的变量名也是一个变量
echo $hello;
echo $$a;
echo ${$a};
?>

5. 字符串中变量的解析规则
当字符串用双引号或 heredoc 结构定义时,其中包含的变量会被解析。
这里有两种语法规则:
  • 简单规则:最常用和最方便的,它可以用最少的代码在一个字符串中嵌入一个变量,一个数组的值或一个对象的属性。
当PHP解析器遇到一个美元符号 $ 时,会组合尽量多的字符来形成一个合法的变量名。
<?php 
$a = 'hello';
$b = ['!','.'];
echo "$a world $b[0]";
?>
  • 复杂规则:用花括号将变量名或整个变量括起来,表示一个整体。
<?php 
$a = 'hello';
$b = ['!','.'];
echo "${a} world {$b[0]}";
?>

当字符串用单引号括起来时,里面如果包含了变量,是无法被解析的,只能当做字符串原样输出。如果非要使用单引号包裹字符串,且还要能解析变量,可以使用字符串连接符 . (点语法)。
<?php 
$a = 'hello';
$b = ['!','.'];
echo $a . ' world ' . $b[0] . '<br/>' . 'see you tomorrow' . $b[1];
?>
双引号字符串,也可以采用字符串连接符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值