php变量的类型与转换及变量与常量的区别
一、变量的类型
变量包含8种数据类型,分别是:
4种标量类型:1、布尔型 bool
<?php$bool=true;?>
2、整形int
<?php$username=1234;?>3、字符串string
<?php$username='admin';?>
4、浮点型float;
<?php$float=16.22;?>
2种复合类型:
1、数组:数组又分为索引数组跟关联数组
所谓索引数组即下标为整形的数组,如
<?php$arr=[1,2,3,4,'admin'];echo'<pre>';var_dump($arr)?>
所谓关联数组即下标为字符串的数组,如
<?php$arr=['uname'=>admin,'email'=>'123@163.com',age=>18,'gender'=>1];echo'<pre>';var_dump($arr);?>
2、对象:对象就是类实例化的结果,具体可以参考https://www.php.cn/php-ask-431790.html,简单一点的例子:
<?phpclassNBAplayer{}$jordan=newNBAplayer;?>
2种特殊类型:
1、null:null表示一个变量没有值,表示一个变量空的很纯粹,相如空字符、空格、0等带其中一个都不属于null,null是连这些都没有的,且null不区分大小写。
<?php//null的两种表现方式//1、直接赋值null$int=null;//2、将原赋值内容释放//给$uname赋值一个字符串$uname='admin';//把$uname的赋值释放unset($uname);//加上@符号忽略notice报错,输出$uname@var_dump($uname)?>
2、resource:资源类型 保存到外部资源的一个引用,如本地有个log.txt文件,想要以读写引用:
<?php$handle=fopen('log.txt','w+');var_dump($handle);?>
二、变量类型的转换
1、临时转换:
页面中很多地方需要用到强制类型转换,常用于urlquerystringparameter,获取get请求的页面分页参数,分页数据必须是整形才能计算偏移量offset。
如:http://localhost/php/study/0803/demo3.php?page=3这个地址page后是分页的参数,如果用get请求获取$_GET['page'],用var_dump()打印会发现,输出的类型是字符串,这个时候就需要对变量做一个类型的转换
<?php//声明变量,并将GET请求请求到的数据强制转换为整数型$page=(int)$_GET['page'];//输出查看$page详情var_dump($page);?>
再举个例子,我们知道一个变量是可以多次重复输出的,那就可以用临时改变变量类型的方法输出不同类型的同一个变量
<?php//声明变量等于整形666$uid=666;//输出时第一个是将变量原样输出,第二个是转换为字符串的形式输出,第三个是转换为浮点型输出,第四个是转换为数组输出,最后一个是转换为数组并获取其中第一个元素输出var_dump($uid,(string)$uid,(float)$uid,(array)$uid,((array)$uid)[0]);?>
2、系统自动转换:
php是弱类型语言,遇到如加减运算等情况时,可以自动转换字符串类型如,如遇到一些内容需要去做加减乘除计算,应该让用户都是只输入数值,但前端没有限制用户输入,用户输入了一些奇奇怪怪的内容,也是可以进行计算的:
<php//模拟前端传过来的非正规参数,$pages='100pages';//对$pages与整形进行加法运算,并加上@符号忽略报错@$pages+=200;//输出$pages详情var_dump($pages);//用下划线分割开echo'<hr>';//对$pages与浮点型进行加法运算$pages+=11.6;//输出$pages详情var_dump($pages);?>
可以看到输出结果,第一个系统自动转换成了整形,第二个系统自动转换成了浮点型
系统自动转换中的加减中null特殊类型会被识别为0。
3、永久转换:
永久转换可以用settype()函数来实现,括号内两个参数第一个是变量,第二个是需要转换成的类型的字符串形式的值;
<php//声明一个变量$pages$pages='100pages';//将$pages的类型永久转换为整形settype($pages,"integer");//输出变量$pages的类型echogettype($pages);?>
三、PHP常量
1.PHP常量一般情况命名推荐全部大写,多个字符之间可以用_隔开;
2.常量是一个固定值,不可被重新定义,且不能被取消;
3.常量的命名前面不能加$符号;
4.常量的定义方式:
define(),括号内两个参数第一个是常量名称,第二个是常量的值;
<?php//定义常量NATION的值为Chinadefine('NATION','China');//输出常量NATIONechoNATION;?>
const 常量名称 = 常量值;
<?php//使用const声明一个常量constUSER_NOT_EXSIT='用户不存在';//使用json_encode对['msg'=>USER_NOT_EXSIT]数组进行JSON编码,320对内容进行格式化echojson_encode(['msg'=>USER_NOT_EXSIT],320);?>
5.需要注意在类常量中只能用const关键字声明不能用define,如:
<?phpclassUser{constAPP_PATH='0802/part1';};?>
四、PHP变量与常量的异同
相同:①两者都是区分大小写的(这一点区别于函数,函数是不分大小写的),②两者开头都不能是数字,可以是字母或者_,③很神奇的是竟然可以是汉字,但是一般没人去用,毕竟一个汉字占了3个字符。
不同:①变量的命名前面必须加$符,常量的命名前面不能加$符,②常量是php全局成员(php全局成员:常量、函数、类、接口),全局成员是不受作用域的限制的,全局生效,变量不是全局成员,严格受作用域的限制,只有在函数体外声明的变量是全局变量。
<?php//声明变量$uname='admin';//声明常量define('NATION','China');functioninfo(){//在函数中声明一个变量及一个常量$pwd=md5('123456');define('CITY','Jinan');echo$pwd;}//调用该函数(函数是执行特定功能的代码块,该函数执行的功能就是定义CITY常量并返回$pwd的值,函数不调用,功能不执行)info();var_dump($uname.'<hr>'.NATION.'<hr>'.$pwd.'<hr>'.CITY);?>
输出结果:
从输出结果可以看到,在函数内定义的$pwd受到了作用域的限制只在函数内被输出了,在函数外没被输出且报错,其他内容均正常输出。
更多相关文章
- php变量与常量
- 作业标题:0803 php变量与常量作业
- zy0803
- 数据类型及类型转换
- PHP基础课第二次作业
- 1. php变量的8种数据类型? 2. php变量类型的转换? 3. 如何定义php
- 08-03作业
- php第一天---变量
- 作业标题:0802-php是什么及运行原理 编程作业