PHP 数据类型

对着背影说爱祢 提交于 2020-02-03 00:35:20

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 教程

  1. PHP简介
  2. PHP安装
  3. PHP语法
  4. PHP数据类型
  5. PHP变量
  6. PHP运算符
  7. PHP流程控制
  8. PHP函数
  9. PHP类与对象
  10. PHP字符串
  11. PHP正则表达示
  12. PHP文件
  13. PHP图形图像
  14. PHPXML
  15. PHP会话缓存
  16. PHP异常处理
  17. PHP数据库
  18. PHP日期时间戳
  19. PHP代码风格规范

server 环境

  1. ubuntu入门
  2. docker入门
  3. git入门
  4. iterm入门

frame 框架

  1. laravel入门
  2. dingo入门
  3. JWT入门
  4. Laravel框架关键技术解析
  5. laravel则修笔记
  6. rpc入门
  7. rabbitmq入门
  8. opencc多国语言
  9. laravel兄弟连笔记
  10. laravel进阶

case 实例

  1. php面试题笔记
  2. python图标提取
  3. 字幕乱码问题
  4. 支付宝接口调用
  5. laravel开发笔记

db 数据库

  1. elasticsearch入门
  2. 数据库操作
  3. 数据库设计
  4. redis入门

help

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!