当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
一、PHP 支持的8种基本数据类型
四种标量类型:
• boolean(布尔型)
• integer(整型)
• float(浮点型,也称作 double)
• string(字符串)
两种复合类型:
• array(数组)
• object(对象)
最后是两种特殊类型:
• resource(资源)
• NULL(无类型)
二、类型检测参数
• var_dump() 函数可以查看表达式的值和类型
• gettype() 函数用于检测变量类型
• is_ 加类型,如 is_int(),is_array() 等,判断变量是否为该类型
创建cetest.php 文件,来验证类型检测参数的用法
-
<?php
-
$a =
TRUE;
-
$b =
"清妹";
-
$c =
0.123;
-
$d =
123;
-
-
if (is_string($b)) {
-
echo
"$b 是字符串".PHP_EOL;
-
}
-
-
if (is_int($c)) {
-
echo
"$c 是整型".PHP_EOL;
-
}
-
-
var_dump($a);
-
var_dump($b);
-
echo gettype($c).PHP_EOL;
-
echo gettype($d);
执行结果如下:
三、Boolean 布尔类型
布尔类型表达真假值,可以为TRUE 或 FALSE,不区分大小写
-
<?php
-
-
$a =
True;
-
$b =
False;
-
-
# 布尔类型为True
-
var_dump($a);
-
# 布尔类型为False
-
var_dump($b);
执行结果如下:
boolean 类型实例,执行结果创建cetest2.php:
-
<?php
-
-
$a =
True;
-
$b =
False;
-
-
$c =
'xxxx';
-
-
// == 是一个操作符,它检测两个变量值是否相等,并返回一个布尔值
-
if ($a == $b) {
-
echo
"a和b相等输出:Hello World\n";
-
echo
"------华丽分割线------\n";
-
}
else
-
{
-
echo
"a和b不相等,不输出!\n";
-
echo
"------华丽分割线------\n";
-
-
}
-
// $b 的值是否为 True
-
if ($b) {
-
echo
"b为真,输出:This is true!\n";
-
}
else
-
{
-
echo
"b为假, 输出:不为True!\n";
-
}
执行结果如下:
注:Boolean 时,其值为 FALSE
- 布尔值 FALSE 本身
- 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 "0"
- 不包括任何元素的数组
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
-
<?php
-
-
$a =
'';
-
$b =
0;
-
$c =
false;
-
$d =
"0";
-
-
if ($a)
-
{
-
echo
"Boolean a为真\n";
-
}
else
-
{
-
echo
"Boolean a为假\n";
-
}
-
-
if ($b)
-
{
-
echo
"Boolean b为真\n";
-
}
else
-
{
-
echo
"Boolean b为假\n";
-
}
-
-
if ($c)
-
{
-
echo
"Boolean c为真\n";
-
}
else
-
{
-
echo
"Boolean c为假\n";
-
}
-
-
if ($d)
-
{
-
echo
"Boolean d为真\n";
-
}
else
-
{
-
echo
"Boolean d为假\n";
-
}
执行结果
创建indexhtml2.php
-
<?php
-
-
$a =
'';
-
$b =
0;
-
$c =
false;
-
$d =
"0";
-
-
var_dump($a == $b);
-
var_dump($b == $d);
-
var_dump($a == $c);
-
var_dump($b == $c);
执行结果如下:
Integer 整型
整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。八进制数字前需加上 0
,十六进制数字前需加上 0x,
二进制数字前需加上 0b
-
<?php
-
-
// 十进制数
-
$a =
1234;
-
// 带加号的数字
-
$b = +
1234;
-
// 负数
-
$c =
-123;
-
// 八进制数 (等于十进制 83)
-
$d =
0123;
-
// 十六进制数 (等于十进制 26)
-
$e =
0x1A;
-
-
-
# 打印结果
-
var_dump($a);
-
echo
"十进制数:$a\n";
-
-
var_dump($b);
-
echo
"带加号的数字:$b\n";
-
-
var_dump($c);
-
echo
"负数:$c\n";
-
-
var_dump($d);
-
echo
"八进制数:$d\n";
-
-
var_dump($e);
-
echo
"十六制数:$e\n";
-
执行结果如下:
有些情况下,整数会溢出,例如如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。
例子如下创建cetest4.php:
-
<?php
-
-
$a =
1234566789;
-
$b =
9223372036854775807;
-
$c =
9355555555555555502;
-
$d =
5555555555555555555 *
1000000;
-
$d1 =
50000000000000 *
1000000;
-
-
var_dump($a);
-
var_dump($b);
-
var_dump($c);
-
var_dump($d);
-
var_dump($d1);
执行结果:
Float 浮点型
浮点型(也叫浮点数 float,双精度数 double 或实数 real),浮点数字节长途,通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式),具体字节长度还是根据不同公司的业务需求来设置
创建cetest5.php
-
<?php
-
$a =
1.234;
-
$b =
1.2e3;
-
$c =
7E-10;
-
-
var_dump($a);
-
var_dump($b);
-
var_dump($c);
-
执行结果如下:
String 字符串类型
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节,PHP 中有 4 中表达方式
- 单引号
单引号内特殊字符和变量不会被解析
创建cetest6.php
-
<?php
-
$a =
'Hello';
-
-
// 打印Hello 后换行,再输出清妹(用单引号输出)
-
echo
'$a \n 清妹\n';
执行结果
- 双引号
双引号内的特殊字符和变量会被解析
-
<?php
-
$a =
'Hello';
-
-
// 打印Hello 后换行,再输出清妹(用双引号输出)
-
echo
"$a \n 清妹\n";
- Heredoc
Heredoc 类似与双引号,内部转义字符和变量可以被解析, 其中 EOT
为标识符(可自定义,我这里自定义为了EOX),但是首尾标识符必须相同。开始标识符 EOT 后需换行,结束标识符 EOT 必须独占一行,且前面不许有空格
创建cetest7.php
-
<<<EOT
-
-
字符串
-
-
EOT;
-
<?php
-
$a =
'Hello' ;
-
echo
<<<EOX
-
$a 早上好,清妹!
-
EOX;
执行结果如下:
- Nowdoc
Nowdoc 类似于单引号,无法解析转移字符和变量,(可自定义,我这里定义为EOD)。
需要在开始标识符加上单引号
-
<?php
-
$a =
'Hello' ;
-
echo <<<
'EOD'
//和 Heredoc 不同点
-
$a Hello
-
EOD;
创建cetest8.php
-
<?php
-
-
$a =
'hello';
-
echo
<<<"EOD"
-
$a ssssssssssssssss
-
EOD;
执行结果:
再来个总的Heredoc和Nowdoc的实例:
-
<?php
-
-
$a =
'Hello';
-
$b =
'$a 早上';
-
$c =
"美好哦";
-
-
$c =
<<<EOX
-
$a \n 我勒个去
-
EOX;
-
-
$d =
<<<'EOX'
-
$a \n
$c
-
EOX;
-
-
var_dump($b);
-
var_dump($c);
-
var_dump($d);
创建cetest9.php
Array 数组
什么是映射?映射就是把 values 关联到 keys 的类型。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。定义数组可以用 array()
或 []
来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。key 可以是 integer(索引数组)或者 string(关联数组),value 可以是任意类型,如对象、数组
创建cetest10.php
-
<?php
-
-
$a = [
-
"b" =>
"bb",
-
"c" =>
"cc",
-
];
-
-
$b = [
-
"bb",
-
"cc"
-
];
-
$c = [
-
"bb",
-
"cc",
-
"a" => $a,
-
"b" => $b,
-
];
-
-
# 如果没有键名,则数组默认使用从 0 开始的数字键名
-
var_dump($a);
-
var_dump($a[
0]);
-
var_dump($b);
-
# 打印数组不存在的 key 的值时,直接返回 NULL
-
var_dump($b[
'b']);
-
# 数组可以多维嵌套,通过键名可以获取特定值
-
var_dump($c[
'a'][
'b']);
执行结果:
Object 对象
一般我们使用 new
创建一个新的对象。下列中-> 意思是调用实例的方法和属性
-
<?php
-
-
class foo
-
{
-
// 创建do函数
-
function do()
-
{
-
echo
"冲动的 do";
-
}
-
}
-
# 创建一个实例方法
-
$f =
new foo;
-
# 调用一个实例的方法和属性
-
$f->do();
转换为对象
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。 array 转换成 object 将使键名成为属性名并具有相对应的值,除了数字键,不迭代就无法被访问。
创建cetest11.php
-
<?php
-
-
class A
-
{
-
}
-
-
# a是对象,转换为对象后不发生变化,所以a 等于 $b
-
$a =
new A();
-
$b = (object)$a;
-
# 字符串 "A" 转换为对象时,自动生成 scalar 属性
-
$c = (object)
'A';
-
$d = (object)
NULL;
-
# 数组 ['hello'=>'world'] 转换为对象时,键名 hello 作为属性,键值 world 为属性值
-
$e = (object)[
'姓名'=>
'清清'];
-
-
var_dump($a);
-
var_dump($b);
-
var_dump($c->scalar);
-
var_dump($d);
-
var_dump($e->姓名);
执行结果如下:
Resource 资源
资源 resource 是一种特殊变量,保存了外部资源的一个引用,如打开文件、数据库连接等,资源是通过专门的函数来建立和使用的
-
<?php
-
-
//打开文件
-
$file = fopen($filename);
-
//数据库连接
-
$db = mysqli_connect();
转换为资源
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
释放资源
引用计数系统是 Zend 引擎的一部分,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要手工释放内存。
实例:
首先在当前/root目录下创建 testx.txt文本,再往里面随便输入一点内容,然后保存。成功创建了testx.txt 文本
创建w.php,然后执行
-
<?php
-
$fh = fopen(
'testx.txt',
'r');
-
if (is_resource($fh))
-
{
-
echo
"文件打开成功";
-
}
-
else
-
{
-
echo
"打开文件错误";
-
}
NULL
特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。 在一个变量被赋值为 NULL、尚未被赋值、被 unset()会被认为是 NULL
PHP中删除变量时unset()和null的区别
unset()会销毁变量
=null并未销毁变量,只是未赋值
-
$str=
'';
-
isset($str);
//结果为true,变量值有值,只是值为空
-
-
$str=
NULL;
-
isset($str);
//结果为false,变量未赋值
转换到 NULL
使用 (unset) 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已
创建null.php
-
<?php
-
-
$array_A =
array(
'a'=>
'嘻嘻',
'b'=>
'小雨');
-
$array_B =
array(
'a'=>
'丫丫',
'b'=>
'小清');
-
-
$array_A[
'b'] =
null;
//设置为null
-
unset($array_B[
'b']);
//销毁变量
-
-
print_r($array_A);
-
print_r($array_B);
执行结果:
类型转换
PHP 是弱语言类型,定义变量的时候不需要制定变量类型,根据上下文自动解成对于的变量类型
算术运算式中,低类型转换为高类型
• 转换以占用内存空间最大的类型为标准,将其他较小的类型转换为较大的类型,以保证精度不降低。如int型和long型运算时,先把int量转换成long型后再进行运算。
• 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
• char型和short型参与运算时,必须先转换成int型
• 赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他
• 函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参
• 函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数
创建cetest15.php
-
<?php
-
-
$foo =
"0";
-
var_dump($foo);
-
-
$foo +=
2;
-
var_dump($foo);
-
-
$foo = $foo +
1.3;
-
var_dump($foo);
-
-
$foo =
5 +
"10 xiao";
-
var_dump($foo);
-
-
$foo =
5 +
"10 xiao1";
-
var_dump($foo);
执行结果可以看到,PHP隐式转换的优先级为:浮点型 > 整型 > 字符串:
类型强制转换
在要转换的变量之前加上用括号括起来的目标类型
• - (int), (integer)
• - 转换为整形 integer - (bool), (boolean)
• - 转换为布尔类型 boolean
• - (float), (double), (real)
• - 转换为浮点型 float - (string)
• - 转换为字符串 string - (array)
• - 转换为数组 array - (object)
• - 转换为对象 object - (unset)
• - 转换为 NULL (PHP 5)
创建cetest.16.php
-
<?php
-
-
// $foo 是整数
-
$foo =
10;
-
// 转换成布尔类型
-
$bar = (boolean) $foo;
-
echo
"$bar\n";
-
执行结果:
参考链接:https://www.shiyanlou.com/courses/23
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重