PHP基础-类型

布尔类型

指定布尔值使用true或者false,不区分大小写.

要明确地将一个值转换成boolean,用(bool)或者(boolean)来强制转换,很多情况下不需要,因为当运算符,函数或者流程控制结构需要一个Boolean参数时,会被自动转换.

转换Boolean,以下值被认为是false:

布尔值false本身

整形0

浮点值0.0

空字符串,以及字符串”0

不包括任何元素数组

特殊类型null,包括尚未赋值的变量

从从标记生成的simpleXML对象

所有其他值都被认为是true


<?phpvar_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)?>


 

 

 

整形

整形可以使用十进制,十六进制,八进制或二进制,前边可以加可选符号(+,-)

八进制数字前加(0)

十六进制数字前加(0x)

二进制数字前加(ob)


<?php$a = 1234; // 十进制数$a = -123; // 负数$a = 0123; // 八进制数 (等于十进制 83)$a = 0x1A; // 十六进制数 (等于十进制 26)$a = 0b11111111; // 二进制数字 (等于十进制 255)?>


 

 

浮点型

以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。

如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。

bcadd — 2个任意精度数字的加法计算

bccomp — 比较两个任意精度的数字

bcdiv — 2个任意精度的数字除法计算

bcmod — 对一个任意精度数字取模

bcmul — 2个任意精度数字乘法计算

bcpow — 任意精度数字的乘方

bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus

bcscale — 设置所有bc数学函数的默认小数点保留位数

bcsqrt — 任意精度数字的二次方根

bcsub — 2个任意精度数字的减法

 

字符串

一个字符串可以用 4 种方式表达:

单引号

双引号

heredoc 语法结构

1:标识符的名称和变量名的要求一样.

2:heredoc的标识符,一定是独占一行,而且前面没有任何其他字符.

3:heredoc对文本的处理,和 双引号一样,\r\n\t,变量,,能解析出来.

 PHP 5.3.0 以后,也可以用 Heredoc 结构来初始化静态变量和类的属性和常量:


<?php// 静态变量function foo(){    static $bar = <<<LABELNothing in here...LABEL;} echo <<<EOTMy name is "$name". I am printing some $foo->foo.Now, I am printing some {$foo->bar[1]}.This should print a capital 'A': \x41EOT;?> 


 

nowdoc 语法结构(自 PHP 5.3.0 起)

nowdoc写法和heredoc一样,唯独在标识符两边用单引号包起来 ,

这样,大段文本的解析,就和单引号一样的效果.

不转义 \n \r \t,变量等等


<?phpecho <<<'EOT'My name is "$name". I am printing some $foo->foo.Now, I am printing some {$foo->bar[1]}.This should not print a capital 'A': \x41EOT;?>


 

当字符串用双引号或 heredoc 结构定义时,其中的变量将会被解析。

 

要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。

如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析:

\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} 符合该正则表达式序列的是一个以十六进制方式来表达的字符

 

 

 

数组

它接受任意数量用逗号分隔的 键(key) => 值(value)对。

键(key)可是是一个整数 integer 或字符串 string

值(value)可以是任意类型的值

最后一个数组单元之后的逗号可以省略

 5.4 起可以使用短数组定义语法,用 [] 替代 array()

$array = [

    "foo" => "bar",

    "bar" => "foo",

];

 

数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖

key 为可选项。如果未指定,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。

数组单元可以通过 array[key] 语法来访问。

自 PHP 5.4 起可以用直接对函数或方法调用的结果进行数组解引用,在此之前只能通过一个临时变量。

<?php

function getArray() {

    return array(1, 2, 3);

}

 

// on PHP 5.4

$secondElement = getArray()[1];

?>

 

要删除某键值对,对其调用 unset() 函数

始终在用字符串表示的数组索引上加上引号 (错误写法:$foo[bar] 正确:$foo['bar'];)

用不着给键名为常量或变量的加上引号,否则会使 PHP 不能解析它们。($foo[$s])

PHP 也可以用已知常量($error_descriptions[E_ERROR]   = "A fatal error has occured";)

 

重申一次,在双引号字符串中,不给索引加上引号是合法的因此 "$foo[bar]" 是合法的(“合法”的原文为 valid。在实际测试中,这么做确实可以访问数组的该元素,但是会报一个常量未定义的 notice。无论如何,强烈建议不要使用 $foo[bar]这样的写法,而要使用 $foo['bar'] 来访问数组中元素。--haohappy 注)。

 

转换数组

将 NULL 转换为 array 会得到一个空的数组

比较

可以用 array_diff() 和数组运算符来比较数组。

更多:

直接改变数组的值自 PHP 5 起可以通过引用传递来做到

可以用 count() 函数来数出数组中元素的个数。

因为数组中的值可以为任意值,也可是另一个数组。这样可以产生递归或多维数组。

数组(Array) 的赋值总是会涉及到值的拷贝。使用引用运算符通过引用来拷贝数组。

<?php

$arr3 = &$arr1;

$arr3[] = 4; // now $arr1 and $arr3 are the same

?>

 

对象和数组转化

把数组转化成任何你想要的对象类型的数组:



function array2object($array) {        $aboutVideoArr = array();        if (is_array($array)) {            foreach ($array as $value) {                  $video = new Video();                foreach ($value as $key => $val) {                       $video->$key = $val;                }                array_push($aboutVideoArr, $video);            }        } else {            $video = $array;        }        return $aboutVideoArr;    }


把对象转化成普通的数组:


function object2array($object) {  if (is_object($object)) {    foreach ($object as $key => $value) {      $array[$key] = $value;    }  }  else {    $array = $object;  }  return $array;} 


 

 

NULL

特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。

被赋值为 NULL

尚未被赋值。

 unset()

 

is_null() 和 unset()。

使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。

 

 

类型转换的判别

PHP 的自动类型转换的一个例子是乘法运算符“*”。如果任何一个操作数是float,则所有的操作数都被当成float,结果也是float。否则操作数会被解释为integer,结果也是integer。注意这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。

允许的强制转换有:

(int), (integer) - 转换为整形 integer

(bool), (boolean) - 转换为布尔类型 boolean

(float), (double), (real) - 转换为浮点型 float

(string) - 转换为字符串 string

(array) - 转换为数组 array

(object) - 转换为对象 object

(unset) - 转换为 NULL (PHP 5)

在括号内允许有空格和制表符

以将变量放置在双引号中的方式来代替将变量转换成字符串:


<?php$foo = 10;            // $foo 是一个整数$str = "$foo";        // $str 是一个字符串$fst = (string) $foo; // $fst 也是一个字符串 // 输出 "they are the same"if ($fst === $str) {    echo "they are the same";}?> 

数组序列化

较为复杂的数组转变为字符串方便存储操作


<?php$test = array("a"=>0,"b"=>0,"c"=>0);  $test2 = '';  $test2=serialize($test);  echo $test2; //类似a:3:{s:1:"a";i:0;s:1:"b";i:0;s:1:"c";i:0;}    print_r(unserialize($test2)); ?>





类型比较

empty — 检查一个变量是否为空

以下的东西被认为是空的:

"" (空字符串)

0 (作为整数的0)

0.0 (作为浮点数的0)

"0" (作为字符串的0)

NULL

FALSE

array() (一个空数组)

$var; (一个声明了,但是没有值的变量)

 

is_null — 检测变量是否为 NULL

被赋值为 NULL。

尚未被赋值。

被 unset()

 

isset — 检测变量是否已设置并且非 NULL

变量未设置的时候为真

变量设置null的时候为真

详细可以参考php手册类型比较表



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值