PHP数据类型
PHP 有8种数据类型:
- booblean(布尔型)
- integer(整型)
- float(浮点型)
- array(数组)
- object(对象)
- resource(资源)
- NULL(空值)
检测数据类型相关的函数
函数 | 检测类型 | 举例 |
---|---|---|
is_bool | 检测变量是否是布尔类型 | is_bool(true),is_bool(false) |
is_string | 检测变量是否是字符串类型 | is_string('string'),is_string(1234) |
is_integer/is_int | 检测变量是否为整数 | is_integer(34),is_integer('34') |
is_float/is_double | 检测变量是否为浮点类型 | is_float(3.1415),is_float('3.1415') |
is_array | 检测变量是否为数组类型 | is_array($arr) |
is_object | 检测变量是否是一个对象类型 | is_object($obj) |
is_null | 检测变量是否为null | is_null(null) |
is_numeric | 检测变量是否为数字或数字组成的字符串 | is_numeric('5'),is_numeric('bccd110' |
常量
在 PHP 中,用 definie() 函数来定义,基本格式:
define( $'变量名',常量表示的值,是否对大写敏感(可选参数,bool值));
例如:
<?php
header("Content-type:text/html;charset=utf-8");
define('MY_NAME', '沫沫');
define('MY_AGE', '20');
define('MY_HOBBY', '看小说睡懒觉');
echo '本府'.MY_NAME.',年芳'.MY_AGE.',尤好'.MY_HOBBY.'。';
function useConst(){
echo '<p>函数名字叫:'.`__FUNCTION`__;
}
echo '<p>这是第'.__LINE__.'行';
echo '<p>本文件的绝对路径为:'.__FILE__;
useConst();
?>
魔术常量
名称 | 说明 |
---|---|
__LINE__ |
文件中的当前行号。 |
__FILE__ |
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。 |
__DIR__ |
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__) 。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) |
__FUNCTION__ |
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 |
__CLASS__ |
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域 |
__TRAIT__ |
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域。 |
__METHOD__ |
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 |
__NAMESPACE__ |
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。 |
布尔型
PHP中布尔值 true 和 false 不区分大小写。
以下值被认为是 false:
- 布尔值 false 本身。
- 整型值 0.
- 浮点型值 0.0。
- 空字符串和字符串“0”。
- 不含任何元素的数组。
- 不含任何成员变量的对象(仅对php4.0适用)。
- 特殊类型NULL(包括尚未定义的变量)。
- 从没有任何标记的 XML 文档生成的 SimpleXML 对象。
字符串型
单、双引号
双引号中所包含的变量会自动被替换长实际数值。
单引号中包含的变量则会按普通字符输出。
转义字符
HereDoc
注意:结尾的标识符前面不能有空格。
数组
varry(value1,
value2,
......)
或
varry(key1 => value1,
key2 => value2,
......)
$my_array[key1] = value1;
$my_array[key2] = value2;
......
NULL
不区分大小写。
满足以下条件之一时,变量的值为NULL:
- 变量没有被赋任何值。
- 变量被指定为NULL。
- 使用 unset() 函数删除的变量。
强制类型转换
强转类型 | 功能描述 |
---|---|
(boolean) | 强转为Boolean类型 |
(string) | 强转为字符串类型 |
(integer) | 强转为整型 |
(float) | 强转为浮点型 |
(array) | 强转为数组 |
(object) | 强转为对象 |
看下面的代码,可以说你绝对不可能说出正确的答案。
<?php
echo (int) 123.999999999999999;
echo (int) -1.999999999999999;
echo (int) -1.9999999999999999;
echo (int) -0.99999999999999999;
echo (int) -10.999999999999999;
echo (int) -1000.9999999999999;
echo (int) -9999999999;
?>
下面来看看我得到的结果。
首先要说明下我的系统环境:Windows10 64位
得到的结果如下
124
-1
-2
-1
-10
-1000
-1410065407
官方给出的说法是: 当从浮点数转换成整数时,将向零取整。
如果浮点数超出了整数范围(通常为 +/- 2.15e+9 = 2^31),则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!
那么,我们来看下面的这个例子。
echo (int) ( (0.1+0.7) * 10 );
不用猜了,这里的执行结果是---7!
对,你没看错,我也没敲错,结果是 7 ,而不是我们通常认为的 8 。
PHP官方有这么一句警告: 决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
所以在进行强制类型转换的时候一定要慎重!大数值,高精度,分数都要慎用!
当然,上面的那个例子可以这样来处理。
<?php
$num = (0.1 + 0.7) * 10;
echo (int) $num; //输出7
(int)$num2 = (0.1 + 0.7) * 10;
echo $num2; //输出8
?>
字符串运算符
<?php
header("Content-type:text/html;charset=utf-8");
$a = '今年是';
$b = 2018;
$c = '年。';
$d = $a.$b.$c;
echo $d;
$e = '请叫我';
$f = '小沫';
$g = "{$e}{$f}";
echo $g;
?>