变量值的讨论
- 将一个变量的值 “传递” 给另一个变量的方式 。
值传递
就是将右边变量的 “ 数据值 ” 本身,复制一份,两个变量互不影响 。
$v1 = 1;
$v2 = $v1; //这里,就是变量传值,只拷贝值。
引用传递
是将右边变量对数据的引用关系,传给左边的变量,改变一个值,会影响引用变量的值。
$v1 = 1;
$v2 = &$v1; //这里,就是引用关系,相当于别名
预定义变量
- 在PHP语言内部,有十多个变量,是系统定义的全局变量,这就是所谓预定义变量 。
- PHP 预定义变量与 JAVA 内置对象很像,但是作用域和细节稍有不同,不能按照相同记忆 。
$_GET 变量
- $_GET 变量里面会“自动存储”(保存/装载)提交到某个文件中的
“get”
数据 。 - GET数据,是在一个页面以
“get”
方式请求时提交的数据 。
$_POST 变量
- $_POST变量里面会“自动存储”(保存/装载)提交到某个文件中的
“post”
数据。 - POST数据,是在一个表单中以
“post”
方式提交的数据。
$_REQUEST 变量
- 代表浏览器通过
“get”
方式 或“post”
方式提交的数据的合集。
<form action="xxx.php?p1=1&age=18" method="post">
<input type="text" name="user_name" />
<!-- 可以用 $request 同时接 get 和 post -->
</form>
$_SERVER变量
- 代表任何一次请求中,客户端或服务器端的一些 “基本信息” 或系统信息 。
- 常用变量如下:
变量名 | 表示内容 |
---|---|
PHP_SELF | 表示当前请求的网页地址(不含域名部分) |
SERVER_NAME | 表示当前请求的服务器名 |
SERVER_ADDR | 表示当前请求的服务器 IP 地址 |
DOCUMENT_ROOT | 表示当前请求的网站物理路径(Apache 设置站点)常用 |
REMOTE_ADDR | 表示当前请求的客户端的 IP 地址 常用 |
SCRIPT_NAME | 表示当前网页地址 |
可变变量
- 变量名本身又是一个“变量”的变量 。
$v1 = 10;
echo $v1; //输出10
$str = "v1"; //这是一个变量,名为str,值为"v1"(字符串)
echo $$str; //输出10,也就是输出的是变量$v1
/*********************************************/
$v1 = 12;
$v2 = 51;
$v3 = 61;
$v4 = 88;
//......
$v100 = 102;
$sum = 0;
for ($i = 1; $i <= 100; $i++)
{
$s = "v" . $i;
$sum += $$s; //利用可变变量求和变得便捷
}
常量
- 常量,就是一个用于存储 “不会变化也不允许变化” 的数据的标识符。
- 圆周率 \ 自然常数 e,就是是一个固定的值(人为规定为某个值)。
定义常量
- define() 函数形式:define(‘常量名’, 对应的常量值),常量名推荐使用“全大写” 。
- const 关键字定义:const 常量名 = 对应的常量值 。
- 推荐使用第二种定义方式 。
常量取值形式
- 直接使用 。
- 使用constant() 函数以取值:
define('PI', 3.1415926536);
echo PI; //注意:前面不带”$”,也不能有引号
echo constant('PI'); //注意:此时常量名要用引号引起来。
变量与常量的区别
- 变量的数据可以变化(重新赋值),常量不可以。
- 变量可以存储各种数据类型,而常量只能存储简单数据类型。
- 给变量赋值可以是 “计算” 结果,但给常量赋值,只能是“直接写出的值”(字面值)
判断一个常量是否存在
- 判断的结果返回:true(表示存在)或 false(表示不存在)。
if ( defined(PI) ) //如果该常量名存在,则......
{
$C = 2 * PI * $r; //do something......
}
预定义常量
常量名 | 表示内容 |
---|---|
PHP_VERSION | 表示当前 PHP 的版本信息 |
PHP_OS | 表示当前 PHP 运行所在的系统信息 |
PHP_INT_MAX | 表示当前版本的 PHP 中的最大的整数值 |
M_PI | 表示圆周率 π(系统保留 10 多位小数) |
魔术常量
常量名 | 表示内容 |
---|---|
__DIR__ | 代表当前 PHP 网页文件所在的目录 |
__FILE__ | 代表当前 PHP 网页文件本身的完整路径 |
__LINE__ | 代表当前这个常量所在的行号 |
数据类型
- 标量类型:string、int、float、boolean
- 复合类型:array、object
- 特殊类型:null、resouce
整形
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
八进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
二进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
$n1 = 123; //10进制形式
$n2 = 0123; //8进制形式,以0开头
$n3 = 0x12A34; //16进制形式,以0x开头
$n4 = 0b1011011010; //2进制形式,以0b开头
decbin(); //将10进制转为2进制
decoct(); //将10进制转为8进制
dechex(); //将10进制转为16进制
bindec(); //将2进制数字字符串转为10进制
octdec(); //将8进制数字字符串转为10进制
hexdec(); //将16进制数字字符串转为10进制
浮点型
- PHP 浮点数不要直接做相等比较,因为浮点数进行相等比较不可靠 。
- 浮点数两种书写形式,小数点、科学计数法 。
/** 2-1 直接小数点形式 **/
$f1 = 0.1; //或者1.23、123.0
/** 2-2 科学计数法 **/
$f2 = 1.23e3; //表示1.23 乘以10的3次方
$f3 = 123e2; //这个也是浮点数,虽然其结果是一个整数
在考虑精度的基础上,将浮点数转换为整数,然后进行 “比较大小”,在精度范围内,如果相等,我们就认为是相等的。
/*
* $v1 = 0.1 + 0.2;
* $v2 = 0.3;
* $v1 和 $v2 相等吗?
**/
if(round($v1 * 10000) == round($v2 * 10000))
{
echo "相等";
}
布尔型
- 只有两个数据值: true、false(不区分大小写)
- 在进行判断或比较的时候,以下会被当作布尔值 false 的数据:false、0、0.0、”“、null、’0’、空数组 。
字符串型
- 双引号字符串中,如果出现变量名,则该变量是可以被“识别”并转换为实际内容的 。
数组类型
- 将多个 “数据” 放在一起,排成一个序列,这个序列作为一个整体 。
- PHP 的数组,索引 / 键名 / 下标 可以不是数组 。
/**************** 形式1 ***************************/
$arr1 = array('张三丰', 18, '男');
$arr2 = array('name' => '张三丰', 'age' => 18, 'gender' => '男');
/**************** 形式2 ***************************/
$arr3 = ['张三丰', 18, '男'];
$arr4 = ['name' => '张三丰', 'age' => 18, 'gender' => '男'];
/**************** 数组的赋值 ***********************/
$arr3['张三丰'] = "NB";
/**************** 数组的取值 ***********************/
print_r($arr3['张三丰']);
空类型
- 只有一个值:null(不区分大小写)。
- isset(); 判断的结果是 false(即不存在)。
isset、unset、empty、is_null的区别
- isset 判断变量是否已存在(配置)
- unset 把变量删除(释放)掉
- empty 判断变量是否为空
- is_null 判断变量是否为NULL
变量 | empty | is_null | isset |
---|---|---|---|
$a = “” | true | false | true |
$a = null | true | true | false |
$a = array() | true | false | true |
$a = false | true | false | true |
$a = 1 | false | false | true |
$a = 0 | true | false | true |
$a = “0” | true | false | true |
$a = “true” | false | false | true |
$a = “false” | false | false | true |
isset(): 判断是否为 null 。为空(不存在),返回 false,否则返回 true 。
empty():判断是否为 “空的” 。是 “空的”,返回 true,否则返回 false。
类型判断和转换
类型判断
- gettype( $v1 ); 获取一个变量的类型,结果为一个变量类型的名称(字符串)。
- settype( $v1, ‘string’); 设置一个变量的类型 。
- var_dump(); 输出变量的“完整信息”,包括变量类型,长度(如果需要),内容 。
- is_integer(); 判断是否为整数类型
- is_int();
- is_float(); 判断是否为浮点类型
- is_bool(); 判断是否为布尔类型
- is_string();
- is_array();
- is_numeric(); 判断是否为 “数字” 类型(含整数,小数,以及 “纯数字字符串”)
- is_object();
类型转换
"1.2abc" + "2abc" //3.2
"abc2.2" + 1.2 //1.2
"10.8" % "3.6abc" //1 转换为整数 10 % 3
"10.8ab" % "3.6cd" //1 转换为整数 10 % 3
$v1 = (int)"1"; //强转,$v1是整数类型的1
$v2 = (float)"1.23"; //强转,$v2是浮点类型的1.23
$v3 = (string)$v1; //强转,$v3是字符串"1"