PHP的数据类型

四种标量类型:1、整型 2、浮点型(小数) 3、字符串 4、布尔型
两种复合类型:1、数组 2、对象
两种特殊类型:1、null 2、资源

一、字符串 string

1.1、单引号

通常执行速度也是最快的,因为PHP不会解析这种字符串(不解析其中是否存在变量) 只能转义单引号和转义字符本身;

echo 'phptherightway is ' . $adjective . '.'    // 一个单引号的使用示例,
    . "\n"                                      // 为变量和转义字符串使用了多行拼接
    . 'I love learning ' . $code . '!';

1.2、双引号

最适用于:

  • 转义字符串
  • 内含多个变量和纯文本的字符串
  • 压缩多行拼接,提高可读性
echo "phptherightway is $adjective.\n I love learning $code!";
// 没有使用多行拼接,

1.3、花括号

$var = 'jack';
$str = "不要把后面的杰克和肉丝分开-----{$var}Rose";

1.4、转义字符

进行转义字符前放置反斜杠;当在双引号内使用这些字符时,它们具有特殊的含义

转义字符的代码 转义字符的含义
\" 双引号
\' 单引号
\\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
\$ 美元符

1.5、字符串连接符点(.)

  • 如果代码行超过了推荐的行长度(120个字符),那么应该考虑拼接代码行
  • 为了便于阅读,最好使用拼接操作符而不是拼接赋值操作符
  • 在变量原本的命名空间内,当拼接使用了新行,则应该缩进
$str = '聂哥帅不帅'
        . "\n"
        . '帅';
echo $str;

1.6、heredoc 语法结构

标识符的命名:只能包含字母、数字和下划线,并且不能用数字和下划线作为开头;结束定界符必须独立一行存在。前后不能有其他字符(包括空白符)

$str = <<<EOD
定义字符串的方法是用heredoc句法结构
EOD;
echo $str;
/*
 $变量名 =  <<<定界符号
 结束定界符;
 */

1.7、NowDoc 语法结构(php5.3+)

名称加单引号。相当于定界符中的单引号。不会解析变量。

echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
EOT;

二、数字类型

1. 整型(intrger)

就是不包括小数点的数,PHP支持以十进制数、八进制数、16进制数表示的整数值 PHP在大多数平台上支持的最大整数是20亿左右【-2147483648,2147483647】,如果超出integer范围,会被解释float类型。

$a  =  1234 ;  // 十进制数
$a  = -123 ;  // 负数
$a  =  0123 ;  // 八进制数 (等于十进制 83)
$a  =  0x1A ;  // 十六进制数 (等于十进制 26)

八进制数由前导0和一个0~7的数字序列组成 0755 =》十进制493 +010 =》十进制 8

十六进制值以0x开头,接着是数字(0~9)或字母(A~F)的序列,一般大写 0xFF //十进制 255 0x10 // 十进制 16 -0xDAD1 //十进制 -56017

三. 浮点型(float)

  • 最大支持【1.7E-38,1.7E+38】,精确到小数点后15位。
  • 浮点数只是近似值,浮点数表示8,其实结果7.999999...,所以不要比较两个浮点数的值是否相等
$a = 1.234; 
$b = 1.2e3; //1.2乘以10的3次方
$c = 7E-10; //7乘以10的-10次方

# 客官留步
$a = (0.1+0.7)*10;
$a = (int)$a;
var_dump($a);

四、布尔型 boolean

布尔值表示某事是真或假,PHP定义了一些值为true,另外一些为false,True或false决定了条件代码的结果。

下面的值都是false,其他所有值都认为true。

  • 整数0 (-1和其他非零值都是true)

  • 浮点型0.0

  • 字符串 '0'"0"、空白字符串(中间无空格)

  • 布尔值false

  • 没有成员的数组

  • null

五、数组

六、对象

七、NULL

下列情况之一被认为是null

  • 赋值null

  • 声明的变量尚未被赋值

  • unset() 函数销毁的变量

八、资源类型

保存外部资源的一个引用.比如一个数据库资源

九、相关函数

1、var_dump()

打印变量的相关信息 $var = 'string'; var_dump($var);

$var = ['a','b','c']; var_dump($var);

对比 print_r

2、empty 检查一个变量是否为空

  • 若变量不存在则返回 TRUE

  • 若变量存在且其值为""0"0"NULLFALSEarray()、声明未赋值的变量; 以及没有任何属性的对象,则返回 TURE
$var = 0; 
// 结果为 true,因为 $var 为空 
if (empty($var)) { 
    echo '$var is either 0 or not set at all'; 
} 
// 结果为 false,因为 $var 已设置 
if (!isset($var)) { 
    echo '$var is not set at all'; 
} 

3、is_null

判断变量是否为NULL.只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE

数据类型之间相互转换

1、类型自动转换

  • 布尔型 true =》 1;false=》0
  • null转整型0
  • 字符串转数字
    "123abc" -> 123
    "1.23abc" -> 1.23

2、强制类型转换

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

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

2.2、使用3个具体类型的转换函数

  • intval(变量,进制)
    int intval ( mixed $var [, int $base = 10 ] )
  • floatval(变量)
    float floatval ( mixed $var )
  • strval()
    string strval ( mixed $var )
$a1 = 10.4;
$a2 = -12.5;
$a3 = 44.1238503;

print intval($a1);   // returns 10
print intval($a2);   // returns -12
print intval($a3);   // returns 44

2.3、使用通用类型转换函数settype

bool settype(mixed var,string type) //设置变量的类型

$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo 现在是 5   (integer)
settype($bar, "string");  // $bar 现在是 "1" (string)

3、检测变量类型函数

  • is_int():检查变量是否是整数
  • is_float():检查变量是否是浮点
  • is_string():检查变量是否是字符串
  • is_bool():检查变量是否是布尔
  • is_array():检查变量是否是数组
  • is_object():检查变量是否是一个对象
  • is_resource():检查变量是否是一个资源
  • is_null():检查变量是否为Null
  • is_scalar():判该变量是否是标量
  • is_numeric():判断是否是数字或数字字符串
  • is_callback()判断是否是有效的函数名
var_dump(is_int(23)); //bool(true)
var_dump(is_int("23")); //bool(false)
var_dump(is_int(23.5)); //bool(false)
var_dump(is_int(NULL)); //bool(false)
var_dump(is_int("")); //bool(false)

伪类型

  • mixed:混合类型,可接受多种不同的类型
  • number:参数可以是int或float
  • callback:函数