1. PHP支持八种原始数据类型
四种标量类型:
boolean(布尔型,也写作bool)
布尔型是最简单的数据类型,只有两个值 true 和 false(不区分大小写)。
可以使用 (bool) 或 (boolean) 将某个值的类型强制转换为布尔型,但是,很多情况下,并不需要手工进行强制转换。因为当运算符、函数或流程控制结构中需要一个布尔值时,会自动转换。
以下七种值,当转换为boolean时,被认为是false:
- 布尔型false本身
- 整型0
- 浮点型0.0
- 字符串'0'或"0"
- 空字符串''或""
- 空数组array()或[]
- NULL或null
除此之外的所有值,都被当做是true。
<?php
var_dump( (bool)false );
var_dump( (bool)0 );
var_dump( (bool)0.0 );
var_dump( (bool)'0' );
var_dump( (bool)'' );
var_dump( (bool)array() );
var_dump( (bool)null );
?>
integer(整型,也写作int)
整型值可以使用十进制(decimal),十六进制(hexadecimal),八进制(octal)或二进制(binary)表示,前面可以加上可选的符号(- 或者 +),表示正负,如果没有前导符号,则为正值。
十进制负数:$a= -168;
八进制:数字前必须加0(零),如 $a = 0217;
十六进制:数字前必须加0x或0X,如 $a = 0x539a2f;
二进制:数字前必须加0b,如 $a = 0b1001;
float(浮点型,也称作双精度数double或实数real)
浮点数(小数)也有正负之分,还支持科学计数法(e或E)的形式。
$a = 3.14;
$a = -3.14;
$a = 3e2;
$a = 3.65e-2;
string(字符串)
字符串是由一系列的字符组成,字符串可以用4种方式来表示。
单引号:$a = 'hello world';
双引号:$a = "hello world";
heredoc语法结构:
<?php
$a = <<<EOD
this is a test,
hello world!
EOD;
echo $a;
?>
这种语法结构一般用来表示大文本的字符串,就像是没有双引号的字符串,包含的变量可以被解析,转义序列也可用。
这种表示字符串的方式,必须以<<<开头,后面紧跟一个标识符(如EOD),然后换行,接下来的内容就是要表达的字符串本身,然后再换行,以前面定义的标识符结尾。
注意:结束标识符所在行的行首不能有任何字符(空格和制表符也不行),结束标识符的末尾可以跟一个分号,但分号的前后也不能有任何空格或制表符,结束标识符的最后必须跟一个换行。
nowdoc语法结构:
就象 heredoc 结构类似于双引号字符串,nowdoc 结构是类似于单引号字符串的,包含的变量不能被解析,所有的转义序列都不可用。nowdoc的开始标识符必须用单引号括起来,其它的地方和 heredoc 结构一样。
<?php
$a = <<<'EOD'
this is a test,
hello world!
EOD;
echo $a;
?>
字符串中单个字符的读取和修改:字符串中的字符可以通过从0开始的下标,用类似数组(中括号或大括号)的形式来访问和修改。
<?php
$a = 'hello';
echo $a[0]; // 访问$a中的第一个字节
$a{0} = 'k'; // 修改$a中的第一个字节
echo '<br/>';
echo $a;
?>
注意:PHP中的字符串在内部是以字节组成的数组,$a[0]或$a{0}实际访问的字符串$a中的第一个字节,而不是字符。因此,用括号的方式来访问或修改字符串中的单个字符对于多字节字符来说很不安全。因为,在utf-8字符集中,1个汉字是占3个字节的,1个英文字符才占1个字节。
两种复合类型:
array(数组)
数组实际上是一个键(key)值(value)对映射的集合。
可以用array()语法结构来新建一个数组。数组中的每一个单元就是一个键值对,单元之间用英文逗号分隔,最后一个逗号可以省略。
键:可以是一个整数或字符串。
值:可以是任意类型。
$arr = array('id'=>1, 'name'=>'小明');
$arr = array(1,2,3);
创建数组的时候,如果省略了键,则数组的键默认是从0开始的。像这种键从0开始的顺序数字键组成的数组被称为索引数组,其他的数组形式都被称为关联数组。
还
可以使用短数组语法创建数组,用
[]
替代
array()
。
$arr = ['id'=>1, 'name'=>'小明'];
或
$arr['id'] = 1;
$arr[] = 3;
数组中单个单元的访问和修改:通过中括号或大括号的形式来实现。
$arr{'id'} = 6;
$arr['name'] = '张三';
object(对象)
创建一个对象,可以使用关键字new实例化一个类。
$obj = new Exception();
$obj = new Exception; // 如果构造函数里面没有参数,也可以省略括号
$obj -> getMessage(); // 调用对象的方法
两种特殊类型:
resource(资源)
资源 resource 是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
资源类型变量保存了打开文件、数据库连接、图形画布区域等的特殊句柄。
$r = mysql_connect('localhost','root','');
echo get_resource_type($r);
NULL(空类型,也写作null)
- 被赋值为NULL
- 尚未被赋值或被定义
- 已被unset()注销
2. PHP支持四种伪类型
mixed(混合类型)
number(数字类型或数值类型)
callback(回调类型,也写作callable)
callback 说明一个参数是另一个函数的函数名。
将PHP的函数以字符串的形式传递给另外一个函数(回调函数),作为参数,这个参数就是回调类型的,该参数可以是任何内置函数或用户自定义函数,但除了这几个语言结构:
array()
,
echo
,
empty()
,
eval()
,
exit()
,
isset()
,
list()
,
print
或
unset()
。
<?php
function func($arg1,$arg2){ // 用户自定义的函数
$res = $arg1+$arg2;
return $arg1.'+'.$arg2.'='.$res;
}
$b = 'func';
$a = call_user_func($b, 3, 6); // 回调函数
echo $a;
?>
call_user_func()是一个回调函数,它的第一个参数是其他函数的函数名(回调类型的参数),后面的可选参数是被调用函数的参数。
call_user_func()可以执行第一个参数所代表的函数,返回值就是被调用函数的返回值。
void 作为返回类型时,表示函数没有返回值;void 作为参数列表时,表示函数不接受任何参数。
void(无)