php变量的类型与转换及变量与常量的区别
一、变量的类型
变量包含8种数据类型,分别是:
4种标量类型:1、布尔型 bool
<?php $bool = true; ?>
2、整形int
<?php $username = 1234; ?>
<?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,简单一点的例子:
<?php class NBAplayer{ } $jordan = new NBAplayer; ?>
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、临时转换:
页面中很多地方需要用到强制类型转换,常用于url query string parameter,获取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的类型 echo gettype($pages); ?>
三、PHP常量
1.PHP常量一般情况命名推荐全部大写,多个字符之间可以用_隔开;
2.常量是一个固定值,不可被重新定义,且不能被取消;
3.常量的命名前面不能加$符号;
4.常量的定义方式:
define(),括号内两个参数第一个是常量名称,第二个是常量的值;
<?php //定义常量NATION的值为China define('NATION','China'); //输出常量NATION echo NATION; ?>
const 常量名称 = 常量值;
<?php //使用const声明一个常量 const USER_NOT_EXSIT = '用户不存在'; //使用json_encode对['msg'=>USER_NOT_EXSIT]数组进行JSON编码,320对内容进行格式化 echo json_encode(['msg'=>USER_NOT_EXSIT],320); ?>
5.需要注意在类常量中只能用const关键字声明 不能用define,如:
<?php class User{ const APP_PATH = '0802/part1'; }; ?>
四、PHP变量与常量的异同
相同:①两者都是区分大小写的(这一点区别于函数,函数是不分大小写的),②两者开头都不能是数字,可以是字母或者_,③很神奇的是竟然可以是汉字,但是一般没人去用,毕竟一个汉字占了3个字符。
不同:①变量的命名前面必须加$符,常量的命名前面不能加$符,②常量是php全局成员(php全局成员:常量、函数、类、接口),全局成员是不受作用域的限制的,全局生效,变量不是全局成员,严格受作用域的限制,只有在函数体外声明的变量是全局变量。
<?php //声明变量 $uname = 'admin'; //声明常量 define('NATION','China'); function info(){ //在函数中声明一个变量及一个常量 $pwd = md5('123456'); define('CITY','Jinan'); echo $pwd; } //调用该函数(函数是执行特定功能的代码块 ,该函数执行的功能就是定义CITY常量并返回$pwd的值,函数不调用,功能不执行) info(); var_dump($uname.'<hr>'.NATION.'<hr>'.$pwd.'<hr>'.CITY); ?>
输出结果:
从输出结果可以看到,在函数内定义的$pwd受到了作用域的限制只在函数内被输出了,在函数外没被输出且报错,其他内容均正常输出。
下一篇: jquery与ajax的区别是什么