Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:
变量是用于存储信息的”容器”,php变量类型有int、string、array和object,我们在项目中往往需要进行类型转换。
转换方式 | 函数 |
---|---|
临时转换 | (int),(string),(array),(object)… |
自动转换 | 要求参与计算的数据都是数值类型,如果不是,就会触发自动转换 |
强制转换 | settype() |
特点:临时转换并不会改变变量的原始数据
我们在获取url地址的时候,需要进行id判断并且需要类型相同,这个时候就需要用到临时转换
<?php
//url中的queryString
//测试地址 http://localhost/demo?=id=1&name=Tome
var_dump($_GET['id']);
//输出 string(1) "1"
//注意:url中的地址全部默认为字符串
//如果需要进行判断,需要把id转为整数才方便运算
$id = (int)$_GET['id'];
//var_dump($id);
//输出 int(1)
if($id === 1){
echo "找到数据了";
}
//整数转换为字符串
$num = 123;
var_dump($num,((string)$num));
//输出 string(3) "123"
字符串进行数组转换,这个比较少用到
// 字符串转换成数组类型
$str = "php";
var_dump((array)$str);
//输出 array(1) { [0]=> string(3) "php" }
var_dump((array)$str[0]);
//输出 array(1) { [0]=> string(1) "p" }
// 字符串转换成对象
var_dump((object)$str,(object)$str["scalar"]);
//输出 object(stdClass)#1 (1) { ["scalar"]=> string(3) "php" }
//输出 object(stdClass)#2 (1) { ["scalar"]=> string(1) "p" }
根据操作符对操作数的类型要求进行转换,转换机制由系统操作;每一种操作符,它要求的操作数类型都是固定的,如果不满足就自动转换
要求参与计算的数据都是数值类型,如果不是,就会触发自动转换
//自动转换:系统
$n = 123;
echo $n + '456';
//输出 579
// "+" 参与计算类型要求数值类型,如果不是,就会触发自动转换
echo $n + (int)'456';
//输出 579
echo $n + '456php';
//输出 579
//如果参数计算类型有字符串类型,则会把起始位置给省略掉
要求字符串拼接,如果不是就会触发自动转换
// "." 要求字符串类型进行拼接,如果不是就会触发自动转换
echo "php" . 123;
//输出 php123
//自动转换形式: 等价于
echo "php" . (string)123;
//输出 php123
最常用的布尔类型
//最常用的布尔转换
if(!$email) echo '未定义邮箱';
//输出 未定义邮箱
//$email 未定义,NULL
var_dump($email);
//输出 NULL
var_export((bool)$email);
//输出 false
强制转换后的变量类型就会永久转换,所以强制转换主要针对变量
//永久转换:只针对变量
$price = 4399;
echo gettype($price);
//输出 integer
settype($price,'string');
//设置变量类型
echo gettype($price);
//输出 string
转换方式 | 函数 |
---|---|
标量 | is_int(),is_string(),is_bool(),is_numberic(),is_scalar()… |
复合 | is_array(),is_object() |
特殊 | is_null(),is_recsource() |
检查参数必须是数值类型
function sum2($a, $b){
if(is_int($a) && is_int($b))
//is_int()检查参数必须为数值,否则会报错
//123 和 '123' 匹配失败
printf("%d + %d = %d", $a, $b, ($a + $b));
else
echo "参数类型错误";
}
sum2(2,3);
//输出 2 + 3 = 5
sum2(2,"3");
//输出 参数类型错误
4.12 is_numberic
检查参数是否是数值或数值型的字符串
<?php
//类型检测
function sum($a, $b)
{
//is_numeric()检查参数是否是数值或数值型的字符串
// 123 和 '123'都可以匹配成功
if(is_numeric($a) && is_numeric($b))
printf("%d + %d = %d", $a, $b, ($a + $b));
else
echo "参数类型错误";
}
sum(2, 3);
//输出 2+3=5
sum(2, "3");
//输出 2+3=5
sum("php","cn");
//输出 参数类型错误
4.13 is_scalar()
检测变量类型是否是标量
$a = 123;
$b = [1,2,3];
var_export(is_scalar($a));
//输出 true
var_export(is_scalar($b));
//输出 false
$arr = [1,2,3];
function getArr($arr){
if(is_array($arr))
var_dump($arr);
else
echo "参数类型错误";
}
getArr($arr);
//输出 array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
$str = NULL;
function getNull($str){
if(is_null($str))
echo "参数类型为NULL";
else
echo $str;
}
echo getNull($str);
命名方式 | 应用场景 |
---|---|
驼峰式 | $timePirce:变量,对象的属性和方法:getUser() |
蛇形 | set_public():函数 |
帕斯卡 | UserModel():类,与驼峰式很像,所以也叫”大驼峰“ |
全大写 | 常量 |
//默认是”值传递“
$price1 = 4399;
$price2 = $price1;
printf("price1 = %d, price2 = %d",$price1,$price2);
//打印 price1 = 4399, price2 = 4399
$price1 = 5288;
printf("price1 = %d, price2 = %d",$price1,$price2);
//打印 price1 = 5288, price2 = 4399
//引用传递
//引用赋值其实就是给原始变量起一个别名,并未创建新变量
$price1 = 4399;
$price2 = &$price1;
printf("price1 = %d, price2 = %d",$price1,$price2);
//打印 price1 = 4399, price2 = 4399
$price1 = 5288;
printf("price1 = %d, price2 = %d",$price1,$price2);
//打印 price1 = 5288, price2 = 5288
预定义变量 | 说明 |
---|---|
超全局变量 | 数组,任何地方都可以访问,不受作用域限制 |
$GLOBALS | 引用全局作用域中可用的全部变量 |
$_SERVER | 服务器和执行环境信息 |
$_GET | 通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组 |
$_POST | 当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本 |
$_COOKIE | 通过 HTTP Cookies 方式传递给当前脚本的变量的数组 |
$_SESSION | 当前脚本可用 SESSION 变量的数组 |
固定的值,一旦创建不可更新,不可删除,常量不是变量,前面不要加“$”,常量推荐全部大写,多个单词之间用下划线连接
//函数
define("NAME","Tome");
//关键字
const NATION = '中国';
echo NATION;