PHP初级变量类型转换与变量和常量的声明方式

一、数据类型转换

变量是用于存储信息的”容器”,php变量类型有int、string、array和object,我们在项目中往往需要进行类型转换。

转换方式函数
临时转换(int),(string),(array),(object)…
自动转换要求参与计算的数据都是数值类型,如果不是,就会触发自动转换
强制转换settype()

1.1 临时转换

特点:临时转换并不会改变变量的原始数据

1.11 int

我们在获取url地址的时候,需要进行id判断并且需要类型相同,这个时候就需要用到临时转换

  1. <?php
  2. //url中的queryString
  3. //测试地址 http://localhost/demo?=id=1&name=Tome
  4. var_dump($_GET['id']);
  5. //输出 string(1) "1"
  6. //注意:url中的地址全部默认为字符串
  7. //如果需要进行判断,需要把id转为整数才方便运算
  8. $id = (int)$_GET['id'];
  9. //var_dump($id);
  10. //输出 int(1)
  11. if($id === 1){
  12. echo "找到数据了";
  13. }

1.12 string

  1. //整数转换为字符串
  2. $num = 123;
  3. var_dump($num,((string)$num));
  4. //输出 string(3) "123"

1.13 array

字符串进行数组转换,这个比较少用到

  1. // 字符串转换成数组类型
  2. $str = "php";
  3. var_dump((array)$str);
  4. //输出 array(1) { [0]=> string(3) "php" }
  5. var_dump((array)$str[0]);
  6. //输出 array(1) { [0]=> string(1) "p" }

1.14 object

  1. // 字符串转换成对象
  2. var_dump((object)$str,(object)$str["scalar"]);
  3. //输出 object(stdClass)#1 (1) { ["scalar"]=> string(3) "php" }
  4. //输出 object(stdClass)#2 (1) { ["scalar"]=> string(1) "p" }

二、自动转换

根据操作符对操作数的类型要求进行转换,转换机制由系统操作;每一种操作符,它要求的操作数类型都是固定的,如果不满足就自动转换

2.1 “+”

要求参与计算的数据都是数值类型,如果不是,就会触发自动转换

  1. //自动转换:系统
  2. $n = 123;
  3. echo $n + '456';
  4. //输出 579
  5. // "+" 参与计算类型要求数值类型,如果不是,就会触发自动转换
  6. echo $n + (int)'456';
  7. //输出 579
  8. echo $n + '456php';
  9. //输出 579
  10. //如果参数计算类型有字符串类型,则会把起始位置给省略掉

2.2 “.”

要求字符串拼接,如果不是就会触发自动转换

  1. // "." 要求字符串类型进行拼接,如果不是就会触发自动转换
  2. echo "php" . 123;
  3. //输出 php123
  4. //自动转换形式: 等价于
  5. echo "php" . (string)123;
  6. //输出 php123

2.3 布尔类型

最常用的布尔类型

  1. //最常用的布尔转换
  2. if(!$email) echo '未定义邮箱';
  3. //输出 未定义邮箱
  4. //$email 未定义,NULL
  5. var_dump($email);
  6. //输出 NULL
  7. var_export((bool)$email);
  8. //输出 false

三、 强制转换

强制转换后的变量类型就会永久转换,所以强制转换主要针对变量

3.1 settype($var,$type)

  1. //永久转换:只针对变量
  2. $price = 4399;
  3. echo gettype($price);
  4. //输出 integer
  5. settype($price,'string');
  6. //设置变量类型
  7. echo gettype($price);
  8. //输出 string

四、类型检测

转换方式函数
标量is_int(),is_string(),is_bool(),is_numberic(),is_scalar()…
复合is_array(),is_object()
特殊is_null(),is_recsource()

4.1 标量

4.11 is_int()

检查参数必须是数值类型

  1. function sum2($a, $b){
  2. if(is_int($a) && is_int($b))
  3. //is_int()检查参数必须为数值,否则会报错
  4. //123 和 '123' 匹配失败
  5. printf("%d + %d = %d", $a, $b, ($a + $b));
  6. else
  7. echo "参数类型错误";
  8. }
  9. sum2(2,3);
  10. //输出 2 + 3 = 5
  11. sum2(2,"3");
  12. //输出 参数类型错误

4.12 is_numberic
检查参数是否是数值或数值型的字符串

  1. <?php
  2. //类型检测
  3. function sum($a, $b)
  4. {
  5. //is_numeric()检查参数是否是数值或数值型的字符串
  6. // 123 和 '123'都可以匹配成功
  7. if(is_numeric($a) && is_numeric($b))
  8. printf("%d + %d = %d", $a, $b, ($a + $b));
  9. else
  10. echo "参数类型错误";
  11. }
  12. sum(2, 3);
  13. //输出 2+3=5
  14. sum(2, "3");
  15. //输出 2+3=5
  16. sum("php","cn");
  17. //输出 参数类型错误

4.13 is_scalar()
检测变量类型是否是标量

  1. $a = 123;
  2. $b = [1,2,3];
  3. var_export(is_scalar($a));
  4. //输出 true
  5. var_export(is_scalar($b));
  6. //输出 false

5.1 复合

5.11 is_array()
  1. $arr = [1,2,3];
  2. function getArr($arr){
  3. if(is_array($arr))
  4. var_dump($arr);
  5. else
  6. echo "参数类型错误";
  7. }
  8. getArr($arr);
  9. //输出 array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }

5.2 特殊

5.21 is_null
  1. $str = NULL;
  2. function getNull($str){
  3. if(is_null($str))
  4. echo "参数类型为NULL";
  5. else
  6. echo $str;
  7. }
  8. echo getNull($str);

六、变量

6.1 命名规则

命名方式应用场景
驼峰式$timePirce:变量,对象的属性和方法:getUser()
蛇形set_public():函数
帕斯卡UserModel():类,与驼峰式很像,所以也叫”大驼峰“
全大写常量

6.2 变量声明

  • 变量必须要用”$“为前缀:$name
  • 严格区分大小写

6.3 变量赋值

6.31 值传递
  1. //默认是”值传递“
  2. $price1 = 4399;
  3. $price2 = $price1;
  4. printf("price1 = %d, price2 = %d",$price1,$price2);
  5. //打印 price1 = 4399, price2 = 4399
  6. $price1 = 5288;
  7. printf("price1 = %d, price2 = %d",$price1,$price2);
  8. //打印 price1 = 5288, price2 = 4399
6.32 引用赋值
  1. //引用传递
  2. //引用赋值其实就是给原始变量起一个别名,并未创建新变量
  3. $price1 = 4399;
  4. $price2 = &$price1;
  5. printf("price1 = %d, price2 = %d",$price1,$price2);
  6. //打印 price1 = 4399, price2 = 4399
  7. $price1 = 5288;
  8. printf("price1 = %d, price2 = %d",$price1,$price2);
  9. //打印 price1 = 5288, price2 = 5288

6.4 预定义变量

预定义变量说明
超全局变量数组,任何地方都可以访问,不受作用域限制
$GLOBALS引用全局作用域中可用的全部变量
$_SERVER服务器和执行环境信息
$_GET通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
$_POST当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
$_COOKIE通过 HTTP Cookies 方式传递给当前脚本的变量的数组
$_SESSION当前脚本可用 SESSION 变量的数组

七、常量

固定的值,一旦创建不可更新,不可删除,常量不是变量,前面不要加“$”,常量推荐全部大写,多个单词之间用下划线连接

7.1 define()

  1. //函数
  2. define("NAME","Tome");

7.2 const

  1. //关键字
  2. const NATION = '中国';
  3. echo NATION;