php数据类型阅读笔记

php常用的数据类型有:布尔类型,整型,浮点型,字符串,数组,对象,NULL


一.type: bool boolean布尔类型

当转换为 boolean 时,以下值被认为是 FALSE:

1.布尔值 FALSE 本身;

2.整型值 0(零);

3.浮点型值 0.0(零);

4.空字符串,以及字符串 "0";

5.不包括任何元素的数组;

6.不包括任何成员变量的对象(仅 PHP 4.0 适用);

7.特殊类型 NULL(包括尚未赋值的变量);

8.从空标记生成的 SimpleXML 对象。

注意事项:

1.var_dump((bool) "0") ;                 //之前以为是true,字符串0返回false

   var_dump((bool) "0.0") ;              //返回true

2.var_dump(0 == "sdade");

   var_dump("sdade" == 0);            //两个都是true,非数字字符串转化为整型为0

   var_dump("sdade" == (string)0);//返回false

3.var_dump("897" == 0);                //返回false,数字字符串转化为整型为本身数字

4.var_dump(!!"testing");                  //直接返回bool类型

5.echo false                                      //输出空白

   echo true                                       //输出1


二.type:integer整型

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

decimal:[+-]?[1-9][0-9]*                  //十进制表示方法

hexadecimal:[+-]?0[xX][1-9a-fA-F] //十六进制表示方法

octal:[+-]?0[1-7]+                             //八进制表示方法

binary:[+-]?0[b][01]+                        //二进制表示方法

注意事项:

1.如果进制数传递一个非法的数字,后面的其余数将会被忽略,如$a=01386将会赋值11

2.整数的范围可以用常量PHP_INT_MAX来表示如果整数溢出会将int转化为float类,如                                        var_dump(5000000000*5000000000000);     //输出float 2.5E+22

3.当两个整数不能整除时,会将结果转化为float类型

    var_dump(17/2);                                                  //输出float 8.5

4.将float强制转化为int类型是会向下取整

   var_dump((int)12.9);                                            //输出12

   var_dump((int)-12.9);                                          //输出-12

5.$a = TRUE;

   echo ($a++).$a;                                                  // 因为bool类型不能自加,输出11

6.可以将ip地址在数据库中存储为int类型,这样会读写更快

   var_dump($_SERVER['REMOTE_ADDR']);         //输出192.168.10.1

   $ipArr = explode('.', $_SERVER['REMOTE_ADDR']);

   $ip = $ipArr[0] * 0x1000000

   + $ipArr[1] * 0x10000

   + $ipArr[2] * 0x100

   + $ipArr[3];

   $ipArr    = explode('.',$_SERVER['REMOTE_ADDR']);

   $ip      = $ipArr[0]<<24

   + $ipArr[1]<<16

   + $ipArr[2] <<8

   + $ipArr[3];

   var_dump($ip);                                     //输出3232238081

   var_dump(decbin($ip));                       //输出11000000101010000000101000000001

   将$ip进行数据库读写操作

   从数据库取出得到ip时可以利用右移操作进行,分别保留高位右移24,16,8位得到各位。

   但是php操作的整数类型,右移会发生超出长度被截断可以将高位除法得到//对这块也不太明白。

   $ipArr[0]=(floor)($ip/0x1000000);

   $ip=$ip-$ipArr[0]*0x1000000;

   $ipArr[1] = ($ip & 0xFF0000)  >> 16;

   $ipArr[2] = ($ip & 0xFF00)  >> 8;

   $ipArr[3] = ($ip & 0xFF);

   $ipDotted=implode('.',$ipArr);


三.type:float浮点型

注意事项:

1.浮点型字长和平台的精度有关:echo (int)((0.1 + 0.7) * 10);//输出7,因为浮点型0.1和0.7在存      储过程中以二进制存储无限循环,不能被精确表示:0.1+0.7内部表示成7.9999999999999991118...。

因此不要比较两个浮点数是否相等,但可以在相同精度下比较

   $x = 8 - 6.4;

   $y = 1.6;

   var_dump($x == $y);                                 // boolean false

   var_dump(round($x,3) == round($y,3)); //boolean true

2.var_dump(1.8e308);                                   //float INF 数据过大时会输出无穷大


四.type:string字符串

一个字符串可以用四种方式来表达

单引号;

双引号;

heredoc 语法结构;

nowdoc 语法结构。

注意事项:

1.单引号:

会原样输出单引号里面的内容,只转义反斜线(\)和单引号自身(')不会转义其他序列(例如\n,\r),也不会转义变量($a)。

echo 'I \'m coming in';                                //I 'm coming in

echo 'C:\\movie';                                         //C:\movie

echo 'This will not expand: \n a newline'; //This will not expand: \n a newline

echo 'Variables do not $expand $either';//Variables do not $expand $either

2.双引号:

会输出双引号里面的内容,转义符号()和变量

\n 换行

\r 回车

\t 水平制表符

\v 垂直制表符

\e Escape

\f 换页

\\ 反斜线

\$ 美元标记

3.HereDoc结构:

Heredoc结构就象是没有使用双引号的双引号字符串。

<<<,在该运算符之后要提供一个标识符(可以用双引号括起来),然后换行,接下来是字符串本身,里面的字符将会被转义,最后要用前面定义的标识符作为结束标志,在结束标志符后面只能加一个分号,然后换行。

class foo

{

var $foo;

var $bar;

function foo()

{

$this->foo = 'Foo';

$this->bar = array('Bar1', 'Bar2', 'Bar3');

}

}

$foo = new foo();

$name = 'MyName';

echo <<

My name is "$name". I am printing some $foo->foo.

Now, I am printing some {$foo->bar[1]}.

This should print a capital 'A': \x41

EOT;

会输出:

My name is "MyName". I am printing some Foo.

Now, I am printing some Bar2.

This should print a capital 'A': A

4.NowDoc结构:

NowDoc结构类似于单引号字符串,用来将大段的字符串原样输出

<<<,后面的标识符要用单引号括起来,如<<<'EOT'

5.字符串拼接:字符串拼接使用',',注意'+'没有这个功能

6.变量解析:当字符串内含有复杂语法时,需要使用花括号进行解析。

class beers {

const softdrink = 'rootbeer';

public static $ale = 'ipa';

}

$rootbeer = 'A & W';

$ipa = 'Alexander Keith\'s';

echo "I'd like an {${beers::softdrink}}\n";//输出: I'd like an A & W

echo "I'd like an {${beers::$ale}}\n";       //输出: I'd like an Alexander Keith's

7.字符串转换为数值:

PHP是一个弱类型语言,当一个字符串被用来当做一个数值来取值时:

如果字符串里面以合法的数值开始,则取该数值,否则其值为0

$foo = "0123" + 0;                     // 123,这里是十进制,而不是八进制

$foo = 1 + "bob3";                    // 1

$foo = 1 + "10 Small Pigs";      //11


五.type:array数组

定义方法:

array(key=>value,......),[key=>value]key可以是整型或者字符串,value可以是任何类型.

注意事项:

1.key会有如下的强制转换:

(1)包含有合法的整型值的字符串会被转换为整型。例如键名"8",实际会被存储为8,但是"08"则不会强制转换,因为其不是一个合法的十进制数

var_dump(array('4'=>4));  //4 => int 4

var_dump(array('04'=>4));//'04' => int 4

var_dump(array('4.3'=>4));//'4.3' => int 4

(2)浮点数也会被转化为整型,意味着小数部分会被舍去,如键名8.7实际会存储为8

var_dump(array(8.7 => 4));//  8 => int 4

(3)布尔值也会被转换为整型。即键名true实际存储为1,而键名false实际存储为0

var_dump(array(true => 1, false => 0));//array (size=2)1 => int 1  0 => int 0

(4)Null会被转换为空字符串,即键名null

var_dump([null=>'asd']);//'' => string 'asd'

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

array("foo", "bar", 11 => "hello", "world");//0 =>'foo' 1 =>'bar' 11 => 'hello'  12 => 'world'

3..unset用来删除一个数组中的某个键,但是不会重建索引。如果需要删除后重建索引,需要array_values()函数

unset($a[12]);

print_r($a);//Array ( [0] => foo [1] => bar [11] => hello )

$a[] = 'new';

print_r($a);//Array ( [0] => foo [1] => bar [11] => hello [13] => new )

$b=array_values($a);

print_r($b);//Array ( [0] => foo [1] => bar [2] => hello [3] => new )


六.type:object对象

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

class foo

{

function do_foo()

{

echo "Doing foo.";

}

}

$bar = new foo;

$bar->do_foo();//Doing foo.

注意事项:

将一个对象转换成对象,将不会发生变化,如果其他任何类型的值转换为对象,将会创建一个内置stdClass的类,

如果该值为null,新的实例为空。

数组转换,将使键名转换为属性名并具有相应的值。

对于任何其他的值,名为scalar的成员变量将包含该变量。

var_dump((object)null);//object(stdClass)[2]

var_dump((object)array('first'=>2, 'second'=>4, 'last' => 3));//object(stdClass)[2]

public 'first' => int 2

public 'second' => int 4

public 'last' => int 3

可用来对对象的属性进行赋值

$obj = (object)array(2, 4, 'new' => 3);

var_dump($obj->0);//会报错

var_dump((object)'srtToObj');//object(stdClass)[2]

public 'scalar' => string 'srtToObj' (length=8)


七.type:null

特殊的NULL值表示一个变量没有值,NULL唯一的可能值就是null,下列情况下变量被认为是null:

被赋值为null;

尚未被赋值;

被unset();

注意事项:

空数组和null在==运算符时返回true,在===运算符和is_null()下返回false

$a=array();

var_dump($a==null);//true

var_dump($a===null);//false

var_dump(is_null($a));//false

推荐阅读更多精彩内容

  • PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来...
    梦幻_78af阅读 1,302评论 1 10
  • 把当前目录作为Root Document只需要这条命令即可:php -S localhost:3300 也可以指定...
    绚烂的时光阅读 96评论 0 0
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 2,277评论 4 98
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 79,242评论 12 120
  • number abs ( mixed $number ) 返回参数 number 的绝对值。echo abs(-9...
    张松松阅读 58评论 0 1