咨询电话:
15628812133
13
2017/08

PHP 数据类型

发布时间:2017-08-13 22:26:05
发布者:pengyifeng
浏览量:
0

四种标题类型

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 )


       “boolean” (或为“bool”,从 PHP 4.2.0 起)
type取值

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 整型

整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。


整数溢出

如果给定的一个数超出了 integer 的范围,将会被解释为 float。

同样如果执行的运算结果超出了 integer 范围,也会返回 float。


布尔值转换成整型

FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。


浮点型转成整型

当从浮点数转换成整数时,将向下取整。

echo (int)3.12; # 输出3


字符串转成整型


Float 浮点型

浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:


浮点数的精度

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

如果确实需要更高的精度,应该使用任意精度数学函数或者 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 起)
\eEscape(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 <<


nowdoc类似于单引号不会解析变量

$name = 'Hello';echo <<<'EOD'
里面的变量$name不会解析。
EOD;


转换成字符串

一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。

一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。

这种转换可以在 boolean 和 string 之间相互进行。

数组 array 总是转换成字符串 "Array"。

资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串。

NULL 总是被转变成空字符串。


字符串转成数值

Array数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。


定义数组 array()

可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。

 "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" . "
";    echo '$value=' . "$value" . "
"; }


Object 对象


对象初始化

要创建一个新的对象 object,使用 new 语句实例化一个类:

do_foo();?>


转换为对象

如果将一个对象转换成对象,它将不会有任何变化。

如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。

 'foo');
var_dump(isset($obj->{'1'})); // outputs 'bool(false)'
var_dump(key($obj)); // outputs 'int(1)'?>

对于其他值,会包含进成员变量名 scalar。

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);     //转换后数值:1234.$float=floatval($str); //转换后数值:123.95.$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


关键词:
返回列表