PHP:变量的类型转换方式,变量值传递与值引用的区别,变量作用域,魔术常量
一.变量/常量命名
①变量命名
- 仅允许使用: 英文字母
(a-z,A-Z)
,数字(0-9)
,下划线(\_)
或他们的组合 - 不允许使用数字开头
- 必须使用"
$
"美元符为前缀 严格区分
大小写- 驼峰命名法
②常量命名
- define(): 函数
- const: 关键字作为前缀
- 通常,常量都用
大写字母
表示
二.变量的类型转换方式
转换方式 | 函数 |
---|---|
临时转换 | (int),(string),(array),(object)… |
自动转换 | 根据操作符对操作数的类型要求进行 |
强制转换 | settype() |
①临时转换
大家可以看到$str没有转换之前是string 字符串类型,下面我们用(int)临时转换为数值型
大家可以看到现在进行类型转换之后 s t r 变 成 了 i n t 数 值 型 , 和 str变成了int数值型,和 str变成了int数值型,和int一模一样的类型值,但是这种类型转换不是永久的!而是临时的!
②自动转换:自动转换也就是让浏览器自己去解析转换
类型没有转换之前是字符串 15岁
用@符号抑制报错浏览器将会自动转换类型,类型转换之后15岁变成65,自动和数值类型相加,舍去了后面的字符串文字
③强制转换:settype()
$arr 没有转换类型之前是一个数组Array
强制类型转换为string,输出的类型就是字符串string
代码块
<?php
//定义全局变量
$str = '15';
$int = 30;
//使用(int) 临时把字符串转换为数值
echo (int)$str + $int .'<br>';
var_dump((int)$str,$int);
echo "<hr>";
//自动转换类型
$age = "15岁";
//@符 强制解除报错,会让浏览器自动解析
@$age += 50;
echo $age;
echo "<hr>";
//settype()强制类型转换,把一个数组类型转换为string类型
$arr = ['1','2','3'];
settype($arr,'string');
echo gettype($arr);
?>
三.变量值传递与值引用的区别
①变量值传递
变量a等于50 变量b等于变量a,输出变量b也等于50,这叫变量值传递,我们再看看更改变量a的值,变量b会不会改变属性
我们可以看到,变量a的值改变成100,变量b的值没有变化还是50,变量值传递等于每个人都有相同的值,重新更改赋值变量并不能改变被赋值本身的值,如果在下面在输出一个 变量b等于a呢?
我们可以看到,如果在下面在输出一个 变量b等于a,则变量b等于变量a最新的那个值,也就是说浏览器是从上到下开始解析的,这一点非常重要
②变量引用值传递
变量值引用,用一个&符号放在要引用的变量前面,接下来我们改变一下 c 的 值 , 看 看 c的值,看看 c的值,看看a会不会受影响
大家可以看到,我们在这里改变了 c 的 值 , c的值, c的值,a的值也会收到影响,说明变量值传递和变量值引用是不一样的!
③empty()和isset()
方法 | 含义 |
---|---|
isset() | 用来检测变量是否被定义,若变量存在并且值不为null才返回true 否则返回false |
empty() | 检验变量是否为空,为空返回true 不为空 返回false |
- empty()
变量有值不为空,返回false
变量没有值返回true
- isset()
变量值不存在返回false
变量值存在返回true
代码块
<?php
//值变量传递
//变量a等于50 变量b等于变量a
$a = 50 ;
$b = $a ;
$a = 100 ;
$b = $a ;
echo $b;
echo '<hr>';
//变量值引用 用&符号
$c = 50;
$a = &$c;
//改变一下$c的值
$c = 100;
echo $a ;
echo "<hr>";
// $c = null;
//empty 检验变量是否为空,为空返回true 不为空 返回false
var_dump(empty($c));
echo "<hr>";
//isset 用来检测变量是否被定义,若变量存在并且值不为null才返回true 否则返回false
var_dump(isset($c));
四.变量作用域和魔术常量
名称 | 含义 |
---|---|
全局变量 | 全局变量,声明全局外部的变量,不在函数里面的变量,函数内部无法直接访问全局变量,必须加上global 才访问全局变量 |
局部变量 | 局部变量,声明在函数里面的变量 |
①全局变量:声明全局外部的变量
全局变量,函数内部无法直接访问外面的全局变量,要加上global才能访问到
用global访问外面的全局变量,多个值用,号隔开
②局部变量:声明在函数里面的变量
局部变量声明在函数内部,外部无法访问到函数内部声明的变量
③魔术常量:魔术常量长得像这样__XXXX__,看见两端有下划线的就是魔术常量
系统预定义魔术常量 | 含义 |
---|---|
__FILE__ | 默认常量,PHP程序文件名 |
__LINE__ | 默认常量,PHP程序行数 |
__FILE__默认常量,PHP程序文件名也就是当前文件所在的目录
__LINE__默认常量,PHP程序行数
代码块
<?php
//变量作用域:全局变量声明全局外部的变量
//这是全局变量
// $a = 100;
// $b = 20;
// function Sum(){
// global 访问外面的全局变量
// global $a ,$b;
// 如果没有global 则不能直接访问外面的全局变量
// return $a * $b ;
// }
// echo Sum();
//局部变量:声明在函数内部
function Sum(){
$a = 50 ;
$b = 30 ;
return $a / $b ;
}
echo Sum();
echo "<hr>";
//声明在函数内部的变量无法访问
echo $a ;
echo "<hr>";
//系统预定义魔术变量
// echo __FILE__; //当前文件所在的目录
var_dump( __LINE__);