变量类型
整形 浮点型 字符串 布尔 数组 对象 NULL
变量检测
isset() 函数用于检测变量是否存在 并且非 NULL。对于null,isset也返回false
unset() 函数用于销毁给定的变量。
变量作用域
四种不同的变量作用域:local,global,static,parameter
- 定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
- 函数内定义的变量就是局部变量,它的作用域为函数定义范围内。
- 函数之间存在作用域互不影响。
- 函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组
类型检测
gettype() 函数用于获取变量的类型。is_* 函数来测试某变量是否是某种类型
打印方式
echo,print,print_r,var_dump 的区别
1.echo
输出一个或者多个字符串。
2.print
和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。
3.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
4.var_dump
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
5.var_dump 和 print_r 的区别
var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。
变量类型转换
PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。
自动类型转换
- 字符串到数字的转换,从左到右截取,直到碰到不合法的数字,截取出的部分转成数字
$a = "12.3hello99";
$a = $a + 3;
var_dump($a); // float 15.3
- 数字到字符串的转换
$a = 123;
$a = $a."hello";
var_dump($a); // string '123hello'
- 到布尔型的判断,以下值都被当作假
"" (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
"0" (作为字符串的0)
NULL
FALSE
array() (一个空数组)
传值赋值
赋值传值$B = $A;
,是将A的值复制一份给B,A和B的地址指向不改变,自然修改A和B的值互不影响
<?php
$A = 55;
$B = 29;
$B = $A; // 赋值传值
var_dump($A, $B); // int 55 ; int 55
$B = "zzz";
var_dump($A, $B); // int 55 ; string 'zzz'
引用赋值
引用传值$B = &$A
,是将B的地址指向修改为A的地址,A和B指向同一个内存地址,修改A或B的值会相互影响
<?php
$A = 55;
$B = 29;
$B = &$A; // 引用传值
var_dump($A, $B); // int 55 ; int 55
$B = "zzz";
var_dump($A, $B); // string 'zzz' ; string 'zzz'
变量销毁
unset() 函数用于销毁给定的变量。
不同变量指向同一个内存地址,销毁其同一个变量,内存地址并不会真正被销毁
<?php
$A = 55;
$B = &$A; // 引用传值
var_dump($A, $B); // int 55 ; int 55
$B = "zzz";
var_dump($A, $B); // string 'zzz' ; string 'zzz'
unset($A);
var_dump($A, $B); // null ; string 'zzz'
动态变量名
php很灵活,不止变量名 函数名 类名都可以是动态的。
<?php
// 动态变量名
$liubei = "河北";
$laoda = "liubei";
$paihang = "laoda";
echo $liubei, $$laoda, $$$paihang; //河北河北河北
超级全局变量 各种变量的总结
全局变量:定义在函数外部 ,作用域从定义处一直到文件结尾(函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组)
局部变量:定义在函数内部,只能在函数内部使用
超级全局变量:页面的任何部位,都可以直接访问
常量:声明之后不能修改
/* 超级全局变量
$_GET // 地址栏中获得的值
$_POST // POST提交的值
$_REQUEST // 既有get也有post的内容 get和post如果重复以post为准(在php.ini中 request_order = "GP" post覆盖了get)
$_SESSION
$_COOKIE
$_FILES
$_ENV // 服务器操作系统的环境变量,如服务器的类型,linux mac 环境变量等($_ENV一般禁用 否则容易暴露服务器信息)
$_SERVER // 获取网站域名,以及当前访问的脚本,用户的ip
$GLOBALS // 是对全局变量花名册的一个别名,通过该变量,可以任意访问全局变量
*/
// $GLOBALS的用法
$a = 3;
$b = 4;
function fun(){
print_r($GLOBALS); // 把所有的超级全局变量 全局变量组成一个数组打印出来
$GLOBALS["a"] = 30; // 类似global $a; $a=30;
}
fun();
echo $a; // 30