欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php变量的类型与转换及变量与常量的区别

程序员文章站 2022-03-07 18:42:49
...

一、变量的类型

变量包含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变量的类型与转换及变量与常量的区别

所谓关联数组即下标为字符串的数组,如

 <?php
 $arr = ['uname'=>admin,'email'=>'123@163.com',age=>18,'gender'=>1];
 echo '<pre>';
 var_dump($arr);
 ?>

php变量的类型与转换及变量与常量的区别

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。

php变量的类型与转换及变量与常量的区别

如: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);
?>

可以看到输出结果,第一个系统自动转换成了整形,第二个系统自动转换成了浮点型

php变量的类型与转换及变量与常量的区别

系统自动转换中的加减中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);
?>

输出结果:

php变量的类型与转换及变量与常量的区别

从输出结果可以看到,在函数内定义的$pwd受到了作用域的限制只在函数内被输出了,在函数外没被输出且报错,其他内容均正常输出。