一、数据类型
PHP 支持以下几种数据类型:
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- Resource(资源类型)
1. 字符串
可以将任何文本放在单引号
和双引号
中
<?php
$x = "Hello world!"; // 双引号
echo $x;
echo "<br>"; // 双引号
$x = 'Hello world!'; // 单引号
echo $x;
?>
结果:
2. 整数
注意:
- 整数可以是正数或负数
- 整型可以用三种格式来指定:
- 十进制
- 十六进制( 以 0x 为前缀)
- 八进制(前缀为 0)
<?php
$x = 5678;
var_dump($x); // 正整数
echo "<br>";
$y = -234; // 负整数
var_dump($y);
echo "<br>";
$z = 0x8c; // 十六进制
var_dump($z);
echo "<br>";
$a = 047; // 八进制
var_dump($a);
?>
输出结果:
3. 浮点型
浮点数是带小数部分的数字,或是指数形式(e或E后面加上一个整数n表示10的n次方)。
<?php
$x = 18.635; // 带小数
var_dump($x);
echo "<br>";
$y = 1.3e4; // 指数形式
var_dump($y);
echo "<br>";
$z = 2E-3; // 指数形式
var_dump($z);
?>
输出结果:
4. 布尔型
true或false,不区分大小写(TRUE或FALSE也行)
<?php
$x = true;
var_dump($x);
echo '<br>';
$y = FALSE;
var_dump($y);
?>
输出结果:
5. 数组
数组可以在一个变量中存储多个相同或不同类型的值。
<?php
$a = array(1,2, 2.5, 'okk', true);
var_dump($a);
?>
输出结果:
6. PHP对象
对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,必须使用class关键字声明类对象(类是可以包含属性和方法的结构。)
然后在类中定义数据类型,再在实例化的类中使用数据类型
<?php
class Car
{
var $color;
function __construct($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
function print_vars($obj) {
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
// 实例一个对象
$herbie = new Car("white");
// 显示 herbie 属性
echo "\therbie: Properties\n";
print_vars($herbie);
?>
tips:
- PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
- forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。 - 在$prop => $val中,$prop是关联数组的键,而$val是与该键关联的值。这个语法结构用于声明一个键值对,其中键和值可以是任何数据类型。
- get_object_vars () 函数返回由对象属性组成的关联数组
运行结果:
7. NULL值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
可以通过设置变量值为 NULL 来清空变量数据
<?php
$x = "hello";
var_dump($x);
echo "<br>";
$x = null;
var_dump($x);
?>
输出结果:
8. PHP资源类型
PHP 资源 resource 是一种特殊变量,保存了到外部资源的一个引用。
常见资源数据类型有打开文件、数据库连接、图形画布区域等。
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
使用 get_resource_type() 函数可以返回资源(resource)类型:
get_resource_type(resource $handle): string
此函数返回一个字符串,用于表示传递给它的 resource 的类型。如果参数不是合法的 resource,将产生错误。
<?php
$c = mysql_connect();
echo get_resource_type($c)."\n";
// 打印:mysql link
$fp = fopen("foo","w");
echo get_resource_type($fp)."\n";
// 打印:file
$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc)."\n";
// 打印:domxml document
?>
二、类型比较
松散比较与严格比较
虽然 PHP 是弱类型语言,但也需要明白变量类型及其意义,因为经常需要对 PHP 变量进行比较,包含松散和严格比较。
- 松散比较:使用
两个等号 ==
比较,只比较值,不比较类型。 - 严格比较:用
三个等号 ===
比较,除了比较值,也比较类型。
<?php
echo "<pre>";
if(42 == "42") {
echo '1、值相等';
}
echo PHP_EOL; // 换行符
if(42 === "42") {
echo '2、类型相等';
} else {
echo '3、类型不相等';
}
?>
输出结果:
tips:(PHP_EOL要起作用前要加pre)
PHP_EOL 是文本换行,并不是 html 换行。
在前边 加echo "<pre>";
做文本格式化处理,
后面的PHP_EOL就起作用了.
若不加echo "<pre>";
,则换行符无效
PHP中 比较 0、false、null
<?php
echo '<pre>';
echo '0 == false: ';
var_dump(0 == false);
echo '0 === false: ';
var_dump(0 === false);
echo PHP_EOL;
echo '0 == null: ';
var_dump(0 == null);
echo '0 === null: ';
var_dump(0 === null);
echo PHP_EOL;
echo 'false == null: ';
var_dump(false == null);
echo 'false === null: ';
var_dump(false === null);
echo PHP_EOL;
echo '"0" == false: ';
var_dump("0" == false);
echo '"0" === false: ';
var_dump("0" === false);
echo PHP_EOL;
echo '"0" == null: ';
var_dump("0" == null);
echo '"0" === null: ';
var_dump("0" === null);
echo PHP_EOL;
echo '"" == false: ';
var_dump("" == false);
echo '"" === false: ';
var_dump("" === false);
echo PHP_EOL;
echo '"" == null: ';
var_dump("" == null);
echo '"" === null: ';
var_dump("" === null);
?>
运行结果:
多种类型比较
三、常量
常量是一个简单值的标识符。该值在脚本中不能改变,但在全局均可使用
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
设置常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
define的三个参数:
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。
说明:自 PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。从 PHP 8.0.0 开始,只有 false 是可接受的值,传递 true 将产生一个警告。
1. 区分大小写的常量:(PHP7.3 版本之后不建议使用)
<?php
header("Content-Type:text/html;charset=utf-8"); // 解决浏览器上显示中文乱码的问题
// 区分大小写的常量名
define("GREETING", "欢迎访问 edu.youkuaiyun.com");
echo GREETING; // 输出 "欢迎访问 edu.youkuaiyun.com"
echo '<br>';
echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义
?>
运行结果:
2. 不区分大小写的常量
<?php
header("Content-Type:text/html;charset=utf-8"); // 解决浏览器上显示中文乱码的问题
// 不区分大小写的常量名
define("GREETING", "欢迎访问 edu.youkuaiyun.com", true); // 增加参数true
echo GREETING; // 输出 "欢迎访问 edu.youkuaiyun.com"
echo '<br>';
echo greeting; // 输出 "欢迎访问 edu.youkuaiyun.com"
?>
运行结果:
全局使用
<?php
header("Content-Type:text/html;charset=utf-8"); // 解决浏览器上显示中文乱码的问题
define("GREETING", "欢迎访问 edu.youkuaiyun.com");
function myTest() {
echo GREETING;
}
myTest(); // 输出 "欢迎访问 edu.youkuaiyun.com"
?>
运行结果:
四、字符串
字符串变量用于包含有字符的值。
PHP 并置运算符(.)
在 PHP 中,只有一个字符串运算符,即并置运算符 (.)
并置运算符 (.) 用于把两个字符串值连接起来。
<?php
$str1 = 'Hello';
$str2 = 'World!';
echo $str1." ".$str2;
?>
运行结果:
PHP strlen() 函数
strlen() 函数用于返回字符串的长度(字节数)。
例如:
<?php
header("Content-Type:text/html;charset=utf-8");
$str1 = 'Hello';
echo strlen($str1);
echo '<br>';
echo strlen('hello world');
?>
运行结果:
PHP strpos() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
举例:
echo strpos('hello world', 'w');
运行结果:
五、运算符
1. 算术运算符
运算符 | 名称 | 实例 | 输出结果 |
---|---|---|---|
+ | 加 | 1+2 | 3 |
- | 减 | 3-2 | 1 |
* | 乘 | 3*2 | 6 |
/ | 除 | 3/2 | 1.5 |
% | 模(取余) | 5%2 | 1 |
-x | 设置负数 | -2 | -2 |
~x | 取反(按二进制位进行"取反"运算) | ~1 | -2 |
a.b | 并置 (连接两个字符串) | “hello” . “World” | helloWorld |
2. 赋值运算符
运算符 | 等同于 |
---|---|
x = y | x = y |
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x %= y | x = x % y |
x .= y | x = x . y |
3. 递增/递减运算符
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
– x | 预递减 | x 减 1,然后返回 x |
x – | 后递减 | 返回 x,然后 x 减 1 |
举例:
<?php
$x=10;
echo ++$x; // 输出11
$y=10;
echo $y++; // 输出10
$z=5;
echo --$z; // 输出4
$i=5;
echo $i--; // 输出5
?>
4. 比较运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true 5==8 | 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5===“5” 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 不绝对等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!==“5” 返回true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
5. 逻辑运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6;y=3;(x < 10 and y > 1) 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6;y=3;(x==6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6;y=3;(x==6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6;y=3;(x < 10 && y > 1) 返回 true |
x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6;y=3;(x==5 || y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6;y=3;!(x==y) 返回 true |
6. 数组运算符
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
举例:
<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>
输出结果:
7. 三元运算符
语法格式:
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
举例:
<?php
// 普通写法
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
echo $username, PHP_EOL;
// PHP 5.3+ 版本写法
$username = $_GET['user'] ?: 'nobody';
echo $username, PHP_EOL;
?>
注意:
在 PHP7+ 版本多了一个 NULL 合并运算符 ??
<?php
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
8. 组合比较符(PHP7+版本)
PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式:
$c = $a <=> $b;
说明:
- 如果 $a > $b, 则 $c 的值为 1
- 如果 $a == $b, 则 $c 的值为 0
- 如果 $a < $b, 则 $c 的值为 -1
举例:
<?php
// 整型
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点型
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>