PHP支持8种原始数据类型 : 4种标量类型(int,float,string,boolean),2种复合类型(array,object),2种特殊类型(resource,NULL)
Boolean(布尔)类型
以下值被认为是false
- 布尔值
false
- 整型值
0
- 浮点型
0.0
- 空字符串
''
或者字符串'0'
空数组
空对象
NULL
或未赋值的变量
空标记生成的simpleXML对象
<?php
var_dump((bool)""); // bool(false)
var_dump((bool)1); // bool(true)
var_dump((bool)-2); // bool(true)
var_dump((bool)"foo"); // bool(true)
var_dump((bool)2.3e5); // bool(true)
var_dump((bool)array(12)); // bool(true)
var_dump((bool)array()); // bool(false)
var_dump((bool)"false"); // bool(true)
?>
echo false;
会输出空值
Integer(整型)
整型可以使用十进制,十六进制,八进制或二进制表示,前面可以加可选符号(±)
-
使用八进制数字前必须加0
-
使用十六进制数字前必须加0x
-
使用二进制数字前必须加0b
<?php
$a = 1234 ; // 十进制数
$a = - 123 ; // 负数
$a = 0123 ; // 八进制数 (等于十进制 83)
$a = 0x1A ; // 十六进制数 (等于十进制 26)
$a = 0b10 ; // 二进制进制数 (等于二进制 2)
PHP_INT_MAX
表示 int类型最大值
整数溢出
: 如果数值定义或计算
超过int范围(PHP_INT_MAX),将会转为 float
浮点类型转换
: 当从浮点型转换为整型时,将 向下取整
Warning : 不要将未知的数值转换为int
<?php
echo (int) ( ( 0.1 + 0.7 ) * 10 ); // 显示 7!
Float(浮点型)
Warning : 永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
<?php
$a = 1.23456789 ;
$b = 1.23456780 ;
$epsilon = 0.00001 ;
//要测试浮点数是否相等,要使用一个仅比该数值大一丁点的最小误差值。该值也被称为机器极小值(epsilon)或最小单元取整数,是计算中所能接受的最小的差别值。
if( abs ( $a - $b ) < $epsilon ) {
echo "true" ;
}
NaN
: 某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE 。 由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。
String(字符串)类型
warning : 用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。非法下标类型会产生一个 E_NOTICE 级别错误。用负数下标写入字符串时会产生一个 E_NOTICE 级别错误,用负数下标读取字符串时返回空字符串。写入时只用到了赋值字符串的第一个字符。用空字符串赋值则赋给的值是 NULL 字符。
<?php
$str = '0123';
$str[101] = 7;
echo $str; //0123 7
一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。 Boolean 的 FALSE 被转换成 ""(空字符串)。
Array(数组)类型
key
: int 或者 string
value
: 可以是任意类型
key的强制转换
1. 合法整型值字符串会被转为整型, '8'=>8,但是'08'不会,因为其不是一个合法十进制数值
2. 浮点数会舍去取整
3. 布尔值,true=>1,false=>0
4. NULL会被转为空字符串
5. 数组和对象不能作为键名
<?php
$arr = [
1 => 'a',
'1'=>'b',
1.9 => 'c',
true => 'd',
];
print_r($arr); //Array ( [1] => d )
<?php
$arr = [
0123 => 'a', //八进制数 (等于十进制 83)
123 => 'b',
];
print_r($arr); //Array ( [83] => a [123] => b )
<?php
$arr = [
NULL=>'a',
1=>'b',
];
print_r($arr); //Array ( [] => a [1] => b )
$arr = [
NULL=>'a',
1=>'b',
''=>'c',
];
print_r($arr); //Array ( [] => c [1] => b )
unset
: 允许删除数组中指定键,但是不会重建索引
,重建索引可使用 array_values()
Object(对象)类型
get_object_vars
: 返回由对象属性组成的关联数组
<?php
class A{
public $a=1;
public $b=2;
public $c=3;
}
$a = new A;
print_r(get_object_vars($a));
//Array
//(
// [a] => 1
// [b] => 2
// [c] => 3
//)
NULL(空)类型
1. 被赋值 NULL
2. 未被复制
3. 被unset
<?php
$a = NULL;
var_dump($a);
$b;
var_dump($b);
$c = 666;
unset($c);
var_dump($c);
// NULL