PHP变量类型与转换方式
// php有8种变量类型 4种标量类型 2种复合类型(array ,object) 2种特殊类型(resource,null)
//标量类型
$int = 11;
$float = 11.11;
$bool = false;
$str = 'hello';
//特殊类型
//resource 资源类型 保存到外部资源的一个引用
$handle = fopen('log.txt','w');
var_dump($handle); //resource(3) of type (stream) 3是资源类型id stream是资源类型
//imagecreate()
$image_handle = imagecreate(100,50);
var_dump($image_handle); //resource(3) of type (stream) resource(4) of type (gd) gd库扩展
//null 1.标示一个变量没有值,空 2.不表示空格,也不表示0,不表示空字符串 3.不区分大小写 NULL
var_dump($int);//int(22)
$int = null;
var_dump($int);//null
//PHP变量类型转化
//1.强制类型转换(临时)
$a = '123';
echo gettype((int)$a);
//2.类型永久转换
settype($a,'int');
echo gettype($a);
//系统自动转换
//"+","-" 要求参与计算的数据类型都是数值类型,如果不是,会触发自动转换
$foo ="100pages";
@$foo += 200;
var_dump($foo);//int(300)
$foo += 12.3;
var_dump($foo);//float(312.3)
变量值传递与值引用的区别
//变量赋值
//1.传值赋值:将源变量的值复制出来给另一个变量,修改两个变量的值,互不影响
$a = 45;
$b = $a;
printf('$a的值为%d,$b的值为%d<br>',$a,$b);//$a的值为45,$b的值为45
$a = 450;
printf('$a的值为%d,$b的值为%d<br>',$a,$b);//$a的值为450,$b的值为45
//2.引用赋值 &地址引用符;新的变量 引用/指向了原始变量,互相影响,没有复制操作
$price1 = 25;
$price2 = &$price1;
printf('$price1的值为%d,$price2的值为%d<br>',$price1,$price2);//都是25
$price1 = 250;
printf('$price1的值为%d,$price2的值为%d<br>',$price1,$price2);//都变成了250
//unset()
$foo = 35;
$bar = &$foo;
unset($foo);//仅将$foo、$bar取消关联
var_dump($bar);//int(35)
变量的作用域
function demo(){
//$a,$b 定义在函数内部,属于局部变量,只能在函数内部访问有效
$a = 100;
$b = 200;
echo ($a+%b);
}
demo();
// echo $a;非法访问,在函数外部不能访问局部变量
//全局变量 无法在函数内部直接调用
$one = 100;
$two = 200;
function test(){
//1.global
global $one,$two;
echo($one+$two);
//2.$GLOBAL超全局变量
echo($GLOBAL['$one']+$GLOBAL['$two']);
}
test();
//3.$_GET,$_POST,$_SERVEN等系统预定义变量
echo'<pre>'.print_r($_GET,true).'</pre>';
echo'<pre>'.print_r($_POST,true).'</pre>';
echo'<pre>'.print_r($_SERVEN,true).'</pre>';
魔术常量
- php魔术常量
//LINE php脚本所在的行数
//DIR 它所在的目录,绝对路径
//FUNCTION 当前函数的名称
//METHOD, 输出类的成员函数名称
//NAMESPACE; 显示当前命名空间的名称