PHP 支持8种基本的数据类型。

四种标量类型:

  1. boolean (布尔型)
  2. integer (整型)
  3. float (符点型, 也称作 double)
  4. string (字符串)

两种复合类型:

  1. array (数组)
  2. object (对象)

最后是两种特殊类型:

  1. resource (资源)
  2. NULL (NULL) 

使用var_dump()可显示数据类型;

可强制转换数据类型;如 $num = '45'; echo 1 + (int)$num;而实际上PHP是弱类型语言,对于此例可不用强制转换,可以自动进行类型转换。

 

布尔型:

boolean:取两个值,true/false,不区分大小写。

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

  1. the 布尔值 FALSE 自身
  2. the 整型值 0 (零)
  3. the 浮点型值 0.0 (零)
  4. 空字符串, 以及 字符串 "0"
  5. 不包括任何元素的数组
  6. 不包括任何成员变量的对象(仅PHP 4.0 适用)
  7. 特殊类型 NULL (包括尚未设定的变量)
  8. 从没有任何标记(tags)的XML文档生成的SimpleXML 对象

所有其它值都被认为是 TRUE(包括任何资源)。 

整型:

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

windows平台下,为有符号的32位,其中符号占据一位,最大值为 2^31 - 1(2147483647),可以用常量PHP_INT_MAX 表示;若溢出将被自动转换为浮点型;

 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。 

<?php
var_dump(011090);  // int 72

 

浮点型:

PHP不区分float与double;而且会有某些精度的丢失;

Strings:

字符串有四种声明方式:

  1. 单引号:'','My test';
  2. 双引号:"","PHP字符串";
  3. heredoc:
    <<< EOF  
    HP不区分float与double;而且会有某些精度的丢失少的呢个就 
    
    EOF

      其中,EOF,是一个标记符,可以自定义,但习惯应避开关键字,标记符大小写敏感;而且 第一个 EOF 也可以加上双引号;第二个标记必须出现在新的行首。

     heredoc可以识别变量以及单、双引号中的转义符,但不对双引号转义;
    $name = 'Tim';
    $tester = <<<EOAW
        $name saied:"It's  my book!\n"
        "test"
        'It's  my book!\n'
        over
    EOAW;
    echo $tester;
      输出为:Tim saied:"It's my book! " "test" 'It's my book! ' over
  4. nowdoc:将heredoc的标记加为单引号或将双引号标记替换为单引号即为nowdoc风格;nowdoc能够实现真正的所见即所得;
    $name = 'Tim';
    $tester = <<<'EOAW'
        $name saied:"It's  my book!\n"
        "test"
        'It's  my book!\n'
        over
    EOAW;
    echo $tester;
    输出为:
    $name saied:"It's my book!\n" "test" 'It's my book!\n' over  
    
    

    字符串是一种特殊的数组;

数组:

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

可以使用array()来定义数组:

$arr = '新疆特产';
$fruits = array('0' => 'apple',
                1   => 'orange',
                2   => 'pear',
                true=> '葡萄',
                false=> '橙子',
                4.5 => '西瓜',
                NULL => '不知道',
                -6 => '杏',
                $arr => '哈密瓜',
                );
            print_r($fruits);

输出:
Array ( [0] => 橙子 [1] => 葡萄 [2] => pear [4] => 西瓜 [] => 不知道 [-6] => 杏 [新疆特产] => 哈密瓜 )
// 键(key) 可是是一个 整数(integer)字符串(string),key中的浮点型将被取整为integer;
//
使用 TRUE 作为键名将使 integer 1 成为键名。使用 FALSE 作为键名将使 integer 0 成为键名。使用 NULL 作为键名将等同于使用空字符串。使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样。
// 值(value) 可以是任意类型的值
不能用数组和对象作为键(key)。这样做会导致一个警告:Illegal offset type。 
 1 //定义数组
 2 $arr = array('新疆特产');
 3 $fruits = array('0' => 'apple',
 4                 1   => 'orange',
 5                 2   => 'pear',
 6                 true=> '葡萄',
 7                 false=> '橙子',
 8                 4.5 => '西瓜',
 9                 NULL => '不知道',
10                 -6 => '杏',
11                 $arr => '哈密瓜',
12                 );
13             print_r($fruits);
14 输出:
15 ( ! ) Warning: Illegal offset type in ……index.php on line 74
16 Call Stack
17 #    Time    Memory    Function    Location
18 1    0.0006    347864    {main}( )    ..\index.php:0
19 Array ( [0] => 橙子 [1] => 葡萄 [2] => pear [4] => 西瓜 [] => 不知道 [-6] => 杏 )

 对象:

 

资源类型:

资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。

 is_resource() 函数测定一个变量是否是资源,函数 get_resource_type() 则返回该资源的类型。

 

 NULL:

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

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

  1. 被赋值为 NULL

  2. 尚未被赋值。

  3. 被 unset()。

 

类型强制转换

在要转换的变量之前加上用括号括起来的目标类型。

允许的强制转换有:

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

(binary) 转换会在结果前面加上前缀'b',PHP 5.2.1 新增。 

posted on 2012-10-18 16:32  森林之子  阅读(296)  评论(0编辑  收藏  举报