php类型

来源:互联网 发布:视频语音聊天软件 编辑:程序博客网 时间:2024/06/05 19:22


摘要:

      php支持8种基本的数据类型和一些手册中的伪类型。其中包含4中标量类型(boolean:布尔型,integer:整型;float:浮点型、也称作double双精度类型,string:字符串类型);两种复合类型(array:数组,object:对象,php的对象是基于数组实现的);两种特殊类型(resourc:资源,NULL:空);为了确保代码易读性,php还包含一些伪类型(mixed:代表一个参数可以接受多种不同的类型,但并不是所有,number:说明一个参数可以接受一个integer/float/double类型,callback:代表参数可以接受一个函数名称)。

 

一、布尔类型

      这是最简单的类型,boolean表达了真值,可以为TRUE或FALSE。

      要指定一个布尔值,使用关键字TRUE或FALSE,这两个值都不区分大小写,建议大写使用。通常使用都是通过逻辑运算符返回boolean值。

      布尔类型的转换:

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

  • 布尔值FALSE自身
  • 整型值0
  • 浮点型值0.0
  • 空字符串,以及字符串"0"
  • 不包含任何元素的数组
  • 不包含任何成员变量的对象
  • 特殊类型NULL包含未设置的变量
  • 从没有任何标记(tags)的XML文档生成的SimpleXML对象

      除以上值以外其它值都认为是TRUE(包括任何资源)。 -1和其它非零值(不论正负)都被认为是TRUE!

 

二、整型

         一个integer是Z={…,-2 , -1, 0 , 1 , 2 , …}中的一个整数。

         整型值可以使用十进制,十六进制或八进制表示,前面可以加上可选符号(-或者+) 。八进制表示数字前必须加上0,十六进制表示数字前必须加0x。

<?php$a = 1234; // 十进制数$a = -123; // 负数$a = 0123; // 八进制数 (等于十进制 83)$a = 0x1A; // 十六进制数 (等于十进制 26)?>
         整型数的长度和平台有关,尽管通常最大值大约二十亿(32位有符号) 。php不支持无符号整数,integer值的字长可以用常量PHP_INI_SIZE来表示,自php4.4.0和php5.0.5之后,最大值可以用常量PHP_INI_MAX来表示。如果给定一个数超出integer返回,将被解释为float。同样的如果执行的运算结果超出了integer的范围,也会返回float。

三、浮点型(双精度数或实数)

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

  

<?php$a = 1.234; $b = 1.2e3; $c = 7E-10;?>

        关于浮点数精度的警告        浮点数的字长和平台有关,尽管通常最大值是1.8e308并具有14位十进制数字的精度(64位IEEE格式)。

         显然简单的十进制分数如同0.1或0.7不能在不丢失一点点精度的情况下转换为内部二进制的格式。这会造成混乱的结果:例如,floor((0.1+0.7)*10)通常会返回7而不是预期中的8,因为该结果内部的表示其实是类是7.9。所以永远不要相信浮点数结果精确到最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者gmp函数

如果试图将对象转换为浮点数,会发出一条E_NOTICE的错误。

四、字符串类型

         一个字符串就是由一系列字符组成,因此,一个字符就是一个字节,这就是说一个字节只能有256中不同的变化,这也暗示php无法原生支持Unicode(在php6中对Unicode内置支持)。

         一个很长的字符串是没有问题的,php对字符串的长度限制只和运行php程序的该台计算机的内存大小有关。

        一个字符串同下面4种方法来定义:

  • 单引号声明(如果一个字符串中不包含变量,建议所有字符串都用单引号声明);
  • 双引号(可以对一些特殊字符串进行解析,可以解析变量中的字符串)。
  • heredoc语法结构
  • nowdoc语法结构

        单引号:定义一个字符串最简单的方法就是用单引号把它包围起来(标点符号') 。如果想要输出一个单引号,需要在它的前面价格反斜线(\)。在单引号前或在单引号结尾出想要输出反斜线,输入(\\)。注意,如果任何其它其它字符前加了反斜线,反斜线将会被直接输出。

         双引号:如果字符窜是包围在双双引号中,php讲对一些特殊字符进行解析:(\n:换行符;\r:回车;\t:水平方向的tab;\v:竖直方向的tab;\f:换页;\\:反斜线;\$:美金dollar标记;\":双引号;\[0-7]{1,3}:符合该表达式顺序的字符串是一个八进制的字符;\x[0-9A-Fa-f];{1,2}:符合该表达式顺序的字符串是一个十六进制的地府;) 。在双引号中打印变量有一定规则,推荐一种用{}符号将变量包含的最规范方式如: "He drank some ${beer}s"

         Heredoc结构:第三种第一字符串的方法是用heredoc语法结构:<<<。在该提示符后面,要定义表示符,然后是一个新行,接下来是字符串本身,最后要用前面定义的表示作为结束标识,在结束时所引用的标识符必须在一行的开始位置,结束标识前不能有任何字符包含空隔和缩进,结束标识后不能存在任何除(;)结束符号以外的任何字符,而且,表示符的命名也要像其它标签一样遵循php的规则:只能包含字母、数字、下划线,病来不能用数字和下划线作为开头。Heredoc结构可以输出任何双号支持的特殊字符和变量输出方式,但是Heredoc结构中包含的双引号不用转义而可以直接输出。在PHP5.3.0以后可以用来Heredoc结构来初始化静态变量以及类的属性和常量。

         Nowdoc结构:Nowdoc结构类似于单引号字符串的,Nowdoc不进行任何解析操作,适用于在不需要进行转义的php代码或其它大段文本,Nowdoc结构的申明和Heredoc结构很像,只是开始标识用单引号包含着。Nowdoc结构可以用来在任意静态数据环境中,最典型的示例是用来初始化类的属性和常量。

五、数组

        PHP中的数组实际上是一个有序映射。映射是一种把values关联到keys的类型。此类型在很多方面做了优化,因此可以把他当成真正的数组,或者列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性,数组元素的值也可以是另一个数组。属性结构和多维数组也是允许的。

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

        key可以是integer或者string。如果key是一个integer的标准,这被解释为整数(例如:“8”将被解释为8,而“08”被解释为“08”)。key中的浮点数被取整为integer。在php中索引数组和关联数组是相同的,他们都可以同事包含整型和字符串的下标,而值可以是任意的php类型。

         如果对给出的值没有指定的键名,则当前最大的整数索引值加一。如果指定键名已经有了值,则该值会被覆盖。数组的下标索引都是从0开始的,如果索引是一个字符串强烈建议必须加上双引号,否则php程序会先把字符串当成常量,如果常量存在就返回定义常量的值,否则视为字符串。

        数组可以用一对方括号声明、修改、添加、和访问如下:

<?php$arr = array(5=>1,12=>2,'color'=>'red');  //声明一个数组$arr[] = 56;//给数组末尾追加一个键值对,其索引为数组中最大整数索引值加一,此例中为13$arr["x"]=42;//给数组末尾追加一个键值对,且索引为x,值为42;$arr[5]=60;//修改数组下标为5的值为60unset($arr[12]);//删除数组下标为12的键值对unset($arr);//删除整个数组?>

六、对象 

        要创建一个新的对象object,使用new语句实例化一个类。对象就是类实例化的结果。

<?phpClass  foo{   function test(){     echo 'Doing foo.';   }}$bar = new foo;$bar->test();?>

   如果将一个对象转换成对象,他不会有任何变化。如果其它任何类型的值被转换成对象,将会实例化一个内置的stdClass的对象。如果该值为NULL,则新的实例为空。数组转化成对象讲使用键名成为属性名,并具有对应的值。对于任何其它值,名为scalar的成员变量将包含该值,从下例输出结果中可以发现带有索引下标的数组转换成对象后其索引下标的元素不能访问,因为其命名不符合对象属性命名规则。

<?php$a = null;$b = '这将转化为一个对象';$arr = array(12,'color'=>'red','blue');var_dump((object)$a);echo '<br />';var_dump((object)$b);echo '<br />';var_dump((object)$c);echo '<br />';var_dump((object)$arr);echo '<br />';$objArr = (object)$arr;?>输出object(stdClass)#1 (0) { } object(stdClass)#1 (1) { ["scalar"]=> string(18) "这将转化为一个对象" } object(stdClass)#1 (0) { } object(stdClass)#1 (3) { [0]=> int(12) ["color"]=> string(3) "red" [1]=> string(4) "blue" }

七、资源类型 

        资源是一种特殊的变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型转换为资源没有意义。

        由于PHP4 Zend引擎引进了引用计数系统,可以西东检测到一个资源不再被引用了,这种情况下次资源的所有外部资源都会被垃圾回收系统释放。因此很少需要手工释放内存。

 

八、NULL空类型

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

         在下列情况下一个变量被认为是NULL:

  • 被赋值为NULL;
  • 尚未被赋值;
  • 被unset;

           NULL类型只有一个值,就是大小写不敏感的关键字NULL(你可以写成NULL,也可以写成null),建议大写。

九、文档中使用的常见伪类型(常出现在php函数注释或说明中)

  • mixed 说明一个参数可以接受多种不同的(但并不是所有的)类型
  • number 说明一个参数可以是integer、float、boolean类型
  • callback 说明一个参数可以接受一个函数名称,可以是一个匿名函数

 

十、类型转换

      PHP在变量定义中不需要(或不支持)明确的类型定义;变量的类型是根据使用改变两的上下文所决定的,也就是说如果把一个字符串赋值给变量var,var就成了一个字符串。如果又把一个整型赋值为var,那它就成一个整数了。PHP自动类型转换的一个例子是加号"+"。如果任何一个操作数是浮点数,则所有的操作数都被当成浮点数,否则操作数会被解释为整数,结果也是整数,注意这里并没有改变这些操作数本身的类型;改变的仅是这些操作数如何求职以及表达式本身的类型。

      强制类型转换可以用settype()来实现,这个函数将改变变量本身的类型,如果要保留变量本身的类型,则使用(type)$变量名的方式,这样只会改变运行结果和计算结果的类型。允许强制转换有:

  • (int), (integer) - 转换为 整型(integer)
  • (bool), (boolean) - 转换为 布尔型(boolean)
  • (float), (double), (real) - 转换为 浮点型(float)
  • (string) - 转换为 字符串(string)
  • (binary) - 转换为二进制 字符串(string) (PHP 6)
  • (array) - 转换为 数组(array)
  • (object) - 转换为 对象(object)
  • (unset) - 转换为 NULL (PHP 5)

 

0 0
原创粉丝点击