PHP 数据类型
Posted 衿华客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 数据类型相关的知识,希望对你有一定的参考价值。
PHP 数据类型
四种标题类型
- boolean(布尔型)
- integer(整型)
- float(浮点型,也称作 double)
- string(字符串)
三种复合类型
- array(数组)
- object(对象)
- callable(可调用)
两种特殊类型
- resource(资源)
- NULL(无类型)
伪类型
- mixed(混合类型)
- number(数字类型)
- callback(回调类型,又称为 callable)
- array|object(数组 | 对象类型)
- void (无类型)
获取变量的类型
gettype — 获取变量的类型
string gettype ( mixed $var )
检测变量的类型
- is_array — 检测变量是否是数组
- is_bool — 检测变量是否是布尔型
- is_callable — 检测参数是否为合法的可调用结构
- is_double — is_float 的别名
- is_float — 检测变量是否是浮点型
- is_int — 检测变量是否是整数
- is_integer — is_int 的别名
- is_iterable — Verify that the contents of a variable is an iterable value
- is_long — is_int 的别名
- is_null — 检测变量是否为 NULL
- is_numeric — 检测变量是否为数字或数字字符串
- is_object — 检测变量是否是一个对象
- is_real — is_float 的别名
- is_resource — 检测变量是否为资源类型
- is_scalar — 检测变量是否是一个标量
- is_string — 检测变量是否是字符串
- isset — 检测变量是否设置
- is_nan — 判断是否为合法数值
变量类型转换
settype — 设置变量的类型
bool settype ( mixed &$var , string $type )
参数 | 解释 |
---|---|
var | 要转换的变量。 |
type | 转换后的数据类型 |
type取值
- “boolean” (或为“bool”,从 php 4.2.0 起)
- “integer” (或为“int”,从 PHP 4.2.0 起)
- “float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用)
- "string"
- "array"
- "object"
- “null” (从 PHP 4.2.0 起)
类型强制转换
- (int), (integer) - 转换为整形 integer
- (bool), (boolean) - 转换为布尔类型 boolean
- (float), (double), (real) - 转换为浮点型 float
- (string) - 转换为字符串 string
- (array) - 转换为数组 array
- (object) - 转换为对象 object
- (unset) - 转换为 NULL (PHP 5)
Boolean 布尔类型
这是最简单的类型。boolean 表达了真值,可以为 TRUE 或 FALSE。
转换为布尔值
要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。
但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。
当转换为 boolean 时,以下值被认为是 FALSE:
- 布尔值 FALSE 本身
- 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 "0"
- 不包括任何元素的数组
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
-1 和其它非零值(不论正负)一样,被认为是 TRUE!
Integer 整型
整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
<?php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
?>
整数溢出
如果给定的一个数超出了 integer 的范围,将会被解释为 float。
同样如果执行的运算结果超出了 integer 范围,也会返回 float。
布尔值转换成整型
FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
浮点型转成整型
当从浮点数转换成整数时,将向下取整。
echo (int)3.12; # 输出3
字符串转成整型
<?php
$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1; // $foo is float (11)
$foo = "10.0 pigs " + 1.0; // $foo is float (11)
?>
Float 浮点型
浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
浮点数的精度
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
echo floor((0.1+0.7)*10); # 输出7
String 字符串
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。
这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。
string 最大可以达到 2GB。
4种方式表达
- 单引号
- 双引号
- heredoc 语法结构
- nowdoc 语法结构(自 PHP 5.3.0 起)
单引号
不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。
双引号
用双引号定义的字符串最重要的特征是变量会被解析。
转义字符 | 含义 |
---|---|
\n | 换行(ASCII 字符集中的 LF 或 0x0A (10)) |
\r | 回车(ASCII 字符集中的 CR 或 0x0D (13)) |
\t | 水平制表符(ASCII 字符集中的 HT 或 0x09 (9)) |
\v | 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起) |
\e | Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起) |
\f | 换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起) |
\ | 反斜线 |
\$ | 美元标记 |
\" | 双引号 |
[0-7]{1,3} | 符合该正则表达式序列的是一个以八进制方式来表达的字符 |
\x[0-9A-Fa-f]{1,2} | 符合该正则表达式序列的是一个以十六进制方式来表达的字符 |
heredoc类似于双引号可以解析变量
```php
$name = ‘Hello‘;
echo <<<EOD
里面的变量$name会解析。
EOD;
nowdoc类似于单引号不会解析变量
$name = ‘Hello‘;
echo <<<‘EOD‘
里面的变量$name不会解析。
EOD;
转换成字符串
一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。
一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。
这种转换可以在 boolean 和 string 之间相互进行。
数组 array 总是转换成字符串 "Array"。
资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串。
NULL 总是被转变成空字符串。
字符串转成数值
<?php
$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1; // $foo is float (11)
$foo = "10.0 pigs " + 1.0; // $foo is float (11)
?>
Array数组
PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。
定义数组 array()
可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 自 PHP 5.4 起
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
key 会有如下的强制转换
- 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
- 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
- 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
- Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
- 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
数组类型
- 数字索引数组(下标为数字)
- 关联数组(键值对)
数组遍历
$arr = [‘one‘=>‘First‘, ‘two‘=>‘Second‘];
foreach ($arr as $key => $value)
{
echo ‘$key=‘ . "$key" . "<br>";
echo ‘$value=‘ . "$value" . "<br>";
}
Object 对象
对象初始化
要创建一个新的对象 object,使用 new 语句实例化一个类:
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
转换为对象
如果将一个对象转换成对象,它将不会有任何变化。
如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。
<?php
$obj = (object) array(‘1‘ => ‘foo‘);
var_dump(isset($obj->{‘1‘})); // outputs ‘bool(false)‘
var_dump(key($obj)); // outputs ‘int(1)‘
?>
对于其他值,会包含进成员变量名 scalar。
<?php
$obj = (object) ‘ciao‘;
echo $obj->scalar; // outputs ‘ciao‘
?>
Resource 资源类型
资源 resource 是一种特殊变量,保存了到外部资源的一个引用。
资源是通过专门的函数来建立和使用的。
转换为资源
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
释放资源
PHP也有垃圾自动回收机制,可以自动检测到一个资源不再被引用了。
持久数据库连接比较特殊,它们不会被垃圾回收系统销毁。
NULL
特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。
在下列情况下一个变量被认为是 NULL
- 被赋值为 NULL。
- 尚未被赋值。
- 被 unset()。
转换到 NULL
使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。
mixed
mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
例如 gettype() 可以接受所有的 PHP 类型,str_replace() 可以接受字符串和数组。
number
number 说明一个参数可以是 integer 或者 float。
array|object
array|object 意思是参数既可以是 array 也可以是 object。
void
void 作为返回类型意味着函数的返回值是无用的。
void 作为参数列表意味着函数不接受任何参数。
php如何声明定义数组
- 索引数组
默认下标或带有数字索引的数组
- 关联数组
键名不为纯数字带有指定值如标识符的数组
- 有关键值的说明
键(key)可以是一个整数integer或字符串string
值(value)可以是任意类型的值
- 直接为元素赋值
$myarr[‘Q‘] = "Q";
$myarr[] = "A";
$myarr[] = "B";
$myarr[2] = "B";
print_r($myarr);
#在php中数据可以动态改变长度。并且会默认按下标进行赋值。
- 使用array函数进行赋值
#一维数组
$myarr = array("A","B","C");
foreach($myarr as $key => $value){
echo "key=".$key;
echo "value=".$value;
echo "
";
}
#多维数组,递归输出数组值
function myfun(array $myarr){
foreach($myarr as $key => $value){
if(is_array($value)){
myfun($value);
}else{
echo "key=".$key;
echo "value=".$value;
echo "
";
}
}
}
$myarr = array("A"=>array("1"=>array("a","b","c"),"2","3"),"B","C");
echo myfun($myarr)."维数组";
php如何调用数组方法
- array_keys()返回数组中所有的键名
$myarr = array("A","B","C");
print_r(array_keys($myarr));
- array_values()返回数组中所有的值
$myarr = array("A","B","C");
print_r(array_values($myarr));
php如何对数组查、增、改、删
- 查array_search()数组值查找
#返回查找到的元素下标
$myarr = array("A","B","C");
echo array_search("B",$myarr);
- 增array_push()队尾添加数据
#返回增加后数组的大小
$myarr = array("A","B","C");
echo array_push($myarr,"D");
print_r($myarr);
- 改array_chunk()一维转多维
$myarr = array("A","B","C");
$myarr = array_chunk($myarr,2,true);
print_r($myarr);
- 删array_unique()
#返回删除重复元素后的数组
$myarr = array("A","B","C","B");
print_r(array_unique($myarr));
#unset无返回值
$myarr = array("A","B","C");
unset($myarr[2]);
- 合并array_merge()
$myarr1 = array("one","two");
$myarr2 = array("three","four");
$myarr3 = array_merge($myarr1, $myarr2);
print_r($myarr3);
php如何进行数据类型转换
- 类C强制转换
#第一种转换方式: (int) (bool) (float) (string) (array) (object)
2.$num1=3.14;
3.$num2=(int)$num1;
4.var_dump($num1); //输出float(3.14)
5.var_dump($num2); //输出int(3)
- 获取变量整数、浮点、字符串值
#第二种转换方式: intval() floatval() strval()
2.$str="123.9abc";
3.$int=intval($str); //转换后数值:123
4.$float=floatval($str); //转换后数值:123.9
5.$str=strval($float); //转换后字符串:"123.9"
- 使用settype()封装函数
#bool settype ( mixed &$var , string $type )
type 的可能值为:
“boolean” (或为“bool”,从 PHP 4.2.0 起)
“integer” (或为“int”,从 PHP 4.2.0 起)
“float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用)
"string"
"array"
"object"
“null” (从 PHP 4.2.0 起)
2.$num4=12.8;
3.$flg=settype($num4,"int");
4.var_dump($flg); //输出bool(true)
5.var_dump($num4); //输出int(12)
php如何处理进制转换
- 十进制转二进制decbin()
echo decbin(12); //输出 1100
- 十进制转八进制 decoct()
echo decoct(15); //输出 17
- 十进制转十六进制 dechex()
echo dechex(10); //输出 a
- 二进制转十六制进 bin2hex()
$binary = "11111001";
$hex = dechex(bindec($binary));
echo $hex;//输出f9
- 二进制转十制进 bindec()
echo bindec(‘110011‘); //输出 51
- 八进制转十进制 octdec()
echo octdec(‘77‘); //输出 63
- 十六进制转十进制 hexdec()
echo hexdec("F"); //输出 15
- 任意进制转换 base_convert()
$hexadecimal = ‘A37334‘;
echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100
php如何处理优先级的问题
运算符优先级指定了两个表达式绑定得有多"紧密"。可以使用括号来强制改变优先级。
如果运算符优先级相同,则使用从左到右的左联顺序。
自加、自减、三目运算符
#自加
$a=10;
echo $a++; //先用再加,最后结果为10
echo ++$a; //先加再用,最后结果为11
$a = 10;
$b = $a+ ++++$a;
echo $a; //结果为12
echo "
";
echo $b; //结果为22
#结合性导致的问题(++的优先级比+的高,且为右结合)
衿华客
php 教程
- PHP简介
- PHP安装
- PHP语法
- PHP数据类型
- PHP变量
- PHP运算符
- PHP流程控制
- PHP函数
- PHP类与对象
- PHP字符串
- PHP正则表达示
- PHP文件
- PHP图形图像
- PHPXML
- PHP会话缓存
- PHP异常处理
- PHP数据库
- PHP日期时间戳
- PHP代码风格规范
server 环境
frame 框架
case 实例
db 数据库
help
以上是关于PHP 数据类型的主要内容,如果未能解决你的问题,请参考以下文章