PHP数据类型
-
概念
- PHP是弱类型
-
标量类型
- 布尔型
boolean - 整型
integer - 浮点型
float - 字符串型
string
- 布尔型
-
复合类型
- 数组
array - 对象
object
- 数组
-
特殊类型
- 资源
resource - 空值
NULL
- 资源
整型
- 概念
- 存整数,PHP_INT_MAX获取整形最大值
- PHP支持8、10、16机制的整数
<?php
$num1=10; //十进制
$num2=010; //八进制(数字前面加0)
$num3=0x10; //十六进制(数字前面加0x)
echo $num1,\'<br>\'; //10
echo $num2,\'<br>\'; //8
echo $num3; //16
?>
- PHP提供了进制转换函数
- 十进制(decimalist)
dec - 二进制(binary)
bin - 八进制(octonary)
oct - 十六进制(hexdecimalist)
hex
- 十进制(decimalist)
<?php
echo decbin(123),\'<br>\'; //十进制转二进制
echo bindec(1111011),\'<br>\'; //二进制转十进制
echo dechex(123),\'<br>\'; //十进制转十六进制
echo hexdec(\'7b\'),\'<br>\'; //十六进制转十进制
echo decoct(123); //十进制转八进制
?>
浮点型
- 概念
- 浮点数在内存中保存的是近似值
- 浮点数不能参与比较
- 如果浮点数要比较,必须确定比较的位数
- 如果一个整数超出了整形的范围,会自动的转成浮点型
<?php
var_dump(0.9==(1-0.1)); //bool(true)
echo \'<br>\';
var_dump(0.1==(1-0.9)); //bool(false)
?>
<?php
var_dump(0.9==(1-0.1)); //bool(true)
echo \'<br>\';
var_dump(0.1==(1-0.9)); //bool(false)
echo \'<br>\';
var_dump(bccomp(0.1,1-0.9,5)); //比较小数点后面5位 int(0) 0表示相等
?>
布尔型
- 概念
- 不能使用echo 和print输出布尔型,要使用var_dump()输出
<?php
$flag=false;
var_dump($flag); //bool(false)
?>
字符串型
概念
- 概念
- 在PHP中单引号字符串和双引号字符串是有区别的
- 单引号字符串是真正的字符串
- 双引号字符串要解析字符串中的变量
<?php
$name=\'tom\';
echo \'我的名字叫$name\',\'<br>\'; //我的名字叫$name
echo "我的名字叫$name",\'<br>\'; //我的名字叫tom
?>
{ }取变量值
- { }取变量值
- $和{只要挨着一起就可以
<?php
$name=\'tom\';
echo \'$name是我的名字\',\'<br>\'; //$name是我的名字
echo "{$name}是我的名字",\'<br>\'; //{}表示获取变量的值(tom是我的名字)
echo "${name}是我的名字",\'<br>\'; //$和{只要挨着一起就可以(tom是我的名字)
?>
输出特殊字符
- 输出特殊字符
<?php
echo \'毛主席说:\\'上课不要睡觉\\'\',\'<br>\'; //转义字符 \\'
echo \'文件保存在c:\\\'; //文件保存在c:\
?>
字符串定界符 <<<
- 字符串定界符
- 有<<<开头,后面跟的是标识符
- 字符串定界符的结束符必须顶格写,前面不能有任何的空白字符
- 字符串定界符分为两种,heredoc(双引号),nowdoc(单引号)
- 使用\'\'在开始的定界符号中,将支持双引号的功能,改成了单引号的功能
<?php
$name=\'tom\';
echo <<<mian
$name <br>
<h1>锄禾日当午</h1>
<h1>汗滴禾下土</h1>
<h1>谁知盘中餐</h1>
<h1>粒粒皆辛苦</h1>
mian
?>
<?php
$name=\'tom\';
$echo <<<\'mian\'
$name <br>
<h1>锄禾日当午</h1>
<h1>汗滴禾下土</h1>
<h1>谁知盘中餐</h1>
<h1>粒粒皆辛苦</h1>
mian
?>
数组
数组的概念
- 概念
- 在PHP中数组有两种形式,索引数组和关联数组
- 数组在内存中一段连续的空间
- 如果要保存同一类型的多个数据就使用数组
索引数组与关联数组
- 索引数组与关联数组
- 索引数组:用整数做下标,默认从0开始,后面依次加一
- 关联数组:用字符串做下标,通过=>符号将下标和值关联起来
<?php
# 索引数组
$stu= array(\'tom\',\'berry\',\'ketty\'); //索引数组
print_r($stu); //输出数组 Array ( [0] => tom [1] => berry [2] => ketty )
echo \'<hr>\';
echo $stu[0], \'<br>\'; //tom
echo $stu[1], \'<br>\'; //berry
echo $stu[2], \'<hr>\'; //ketty
# 关联数组
$emp=array(\'name\'=>\'李白\',\'sex\'=>\'男\',\'age\'=>22);
print_r($emp); //Array ( [name] => 李白 [sex] => 男 [age] => 22 )
echo \'<hr>\';
echo $emp[\'name\'],\'<br>\'; //李白
echo $emp[\'sex\'],\'<br>\'; //男
echo $emp[\'age\'];
?>
数组的下标
- 数组的下标
- 数组的下标只能是正整数和字符串
<?php
$array= array(1=>\'a\',\'b\',\'c\',\'d\');
print_r($array); //Array ( [1] => a [2] => b [3] => c [4] => d )
echo \'<br>\';
--------------------------
$array= array(\'a\',2=>\'b\',\'c\',5=>\'d\');
print_r($array); //Array ( [0] => a [2] => b [3] => c [5] => d )
echo \'<br>\';
----------------------------
$array= array(\'a\',\'name\'=>\'b\',\'c\',\'sex\'=>\'d\');
print_r($array); //Array ( [0] => a [name] => b [1] => c [sex] => d )
echo \'<br>\';
------------------------------
$array= array(1=>\'a\',1=>\'b\',1=>\'c\',\'d\');
print_r($array); //Array ( [1] => c [2] => d )
?>
<?php
$stu[true]=\'tom\'; //转成1
$stu[false]=\'berry\'; //转成0
$stu[12.9]=\'aa\'; //转成12(取整数部分)
$stu[-10]=\'bb\'; //负数可以做下标
$stu[-12.3]=\'cc\'; //取负整数
$stu[\'10\']=\'dd\'; //字符串数字转成数字
$stu[\'\']=\'ee\'; //空字符串也可以做下标
$stu[null]=\'ff\'; //转成空字符串做下标
print_r($stu); //Array ( [1] => tom [0] => berry [12] => aa [-10] => bb [-12] => cc [10] => dd [] => ff )
?>
短数组语法
- 短数组语法
- 可以直接通过中括号声明数组
<?php
$stu=[\'tom\',\'berry\',\'ketty\'];
print_r($stu); //Array ( [0] => tom [1] => berry [2] => ketty )
?>
数组的赋值
- 数组的赋值
- PHP7.1语法
<?php
# 两个数交换
$num1= 10;
$num2= 20;
[$num1, $num2]= [$num2, $num1];
echo $num1, \'<br>\', $num2;
?>
二维数组
- 二维数组
<?php
$stu=[
[\'name\'=>\'tom\',\'sex\'=>\'男\',\'age\'=>22],
[\'name\'=>\'berry\',\'sex\'=>\'女\',\'age\'=>23]
];
echo \'<pre>\';
print_r($stu);
?>
字符串可以通过数组的方式去调用
- 字符串可以通过数组的方式去调用
<?php
echo \'abc\'[0],\'<br>\'; //a
echo \'abc\'[-1],\'<br>\'; //c,从右边开始取第一个 7.1开始支持
?>
对象
- 面向对象编程
资源
NULL
- 在PHP中 null和NULL是一样的,不区分大小写
检测变量的数据类型
相关函数
-
检测数据类型的相关函数
-
is_bool检测变量是否属于布尔类型 -
is_string检测变量是否属于字符串类型 -
is_float检测变量是否属于浮点类型 -
is_integer检测变量是否属于整型 -
is_null检测变量是否属于空值 -
is_array检测变量是否属于数组 -
is_resource检测变量是否属于资源 -
is_object检测变量是否属于对象类型 -
is_numeric检测变量是否属于数字或数字组成的字符串
-
-
检测数据类型的函数
gettype()
可变变量
- 变量名为地址值
<?php
$txt = \'abc\';
$$txt = 123;
echo $abc; // 123
?>
变量类型的转换
自动类型转换
- 自动类型转换
- 当提供的类型和需要的类型不一致的时候会自动进行类型转换
<?php
$num=10;
if($num){ //自动将数字转成布尔型
echo \'aa\';
}else{
echo \'bb\';
}
# ---------------------------------
echo \'20\'-10; //自动的将字符串转成数字
?>
强制类型转换
- 强制类型转换
- 语法:(数据类型)数据
<?php
$num1=\'12\';
var_dump($num1,(int)$num1,(float)$num1);
//string(2) "12" int(12) float(12)
?>
-
强制转换类型
-
(boolean)强制转为布尔型 -
(string)强制转为字符串型 -
(integer)强制转为整型 -
(float)强制转为浮点型 -
(array)强制转为数组 -
(object)强制转为对象
-
-
其他类型和布尔之间的转换
- 非0非空为真,其他为假
<?php
var_dump((bool)\'abc\'); echo \'<br>\'; //bool(true)
var_dump((bool)\'\'); echo \'<br>\'; //bool(false)
var_dump((bool)\'0\'); echo \'<br>\'; //bool(false)
var_dump((bool)\'0.0\'); echo \'<br>\'; //bool(true)
var_dump((bool)\'00\'); echo \'<br>\'; //bool(true)
var_dump((bool)\'false\'); echo \'<br>\'; //bool(true)
var_dump((bool)\'null\'); echo \'<br>\'; //bool(true)
var_dump((bool)1); echo \'<br>\'; //bool(true)
var_dump((bool)0); echo \'<br>\'; //bool(false)
var_dump((bool)-10); echo \'<br>\'; //bool(true)
var_dump((bool)0.0); echo \'<br>\'; //bool(false)
var_dump((bool)array()); echo \'<br>\'; //bool(false)
var_dump((bool)array(1)); echo \'<br>\'; //bool(true)
var_dump((bool)array(false));echo \'<br>\'; //bool(true)
var_dump((bool)null); echo \'<br>\'; //bool(false)
?>