PHP基础 之 数据类型
发布于: 2017-01-08 03:50:50 )
一、PHP支持8种原始的数据类型。
1 四种标量类型:
① boolean 布尔型:这是最简单的类型,可以为 TRUE 或 FALSE。
② integer 整型:一个 integer 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的一个数。 整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
③ float 浮点型:浮点型(也叫浮点数 float,双精度数 double 或实数 real)。
④ string 字符型:一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。
2 两种符合类型:
① array 数组:PHP 中的数组实际上是一个有序映射。
映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
定义数组:
可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。
array( key => value
, ...
)
// 键(key)可是是一个整数 integer 或字符串 string
// 值(value)可以是任意类型的值
最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。
② object 对象:要创建一个新的对象 object,使用 new 语句实例化一个类:
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
3 两种特殊类型:
① resource 资源: 资源 resource 是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
a. 转换为资源
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
b. 释放资源
由于 PHP 4 Zend 引擎引进了引用计数系统,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要手工释放内存。
② NULL 无类型:特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。
a. 在下列情况下一个变量被认为是 NULL:
i: 被赋值为 NULL。
ii: 尚未被赋值。
iii: 被 unset()。
b. NULL 类型只有一个值,就是不区分大小写的常量 NULL。
二、其他类型
1 mixed 混合类型
2 number 数字类型
3 callback 回调类型:一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。
回调函数示例:
<?php
// An example callback function
function my_callback_function() {
echo 'hello world!';
}
// An example callback method
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Type 1: Simple callback
call_user_func('my_callback_function');
// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod'));
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
三、开发技巧
1 如果想查看表达式的值和类型,可以使用var_dump()函数。
2 如果只是想得到一个易读懂的类型的表达式用于调试,用户gettype()函数。要想查看某个类型,不要用gettype(),而用get_typeh函数,看下面的例子:
<?php
$a_bool = TRUE; // a boolean
$a_str = "foo"; // a string
$a_str2 = 'foo'; // a string
$an_int = 12; // an integer
echo gettype($a_bool); // prints out: boolean
echo gettype($a_str); // prints out: string
// If this is an integer, increment it by four
if (is_int($an_int)) {
$an_int += 4;
}
// If $bool is a string, print it out
// (does not print out anything)
if (is_string($a_bool)) {
echo "String: $a_bool";
}
?>
3 如果要将变量强制转换为某类型,可以对其使用强制转换或settype()函数。
① 强制类型转换
PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。
<?php
$foo = 10; // $foo is an integer
$bar = (boolean) $foo; // $bar is a boolean
?>
允许的强制转换有:
(int), (integer) - 转换为整形 integer
(bool), (boolean) - 转换为布尔类型 boolean
(float), (double), (real) - 转换为浮点型 float
(string) - 转换为字符串 string
(array) - 转换为数组 array
(object) - 转换为对象 object
(unset) - 转换为 NULL (PHP 5)
(binary) 转换和 b 前缀转换支持为 PHP 5.2.1 新增。
注意在括号内允许有空格和制表符,所以下面两个例子功能相同:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>