基本语法
PHP 标记
PHP 代码可以嵌入 HTML 中使用,为了区分 PHP 代码和 HTML 代码,需要使用 PHP 标记对 PHP 代码进行标识,PHP 的标记分为标准标记和短标记。
PHP 标记的基本用法:
PHP
<?php 代码块 ?>
<? 代码块 ?> // 不推荐使用,需要在php.ini中启用short_open_tag
<?= 输出内容 ?>
示例:PHP 标记
入口页面(index.php):
PHP
<h1><?php echo "Hello PHP!" ?></h1>
<h1><?= "Hello PHP!" ?></h1>
示例效果:

在 PHP 标记后面,如果没有除 PHP 以外的其他代码,标记末尾的 ?> 符号可以省略。
注释
在 PHP 开发中,为了方便开发人员阅读和维护代码,可以添加注释对代码进行解释说明。
单行注释的基本用法:
PHP
// ...
# ...
多行注释的基本用法:
PHP
/*
....
*/
输出语句
PHP 提供了一系列的输出语句,常用的输出语句有 echo、print、print_r、var_dump 等。
echo 输出语句用于输出字符串,如果输出其他类型的数据,会自动转换成字符串。
echo 输出语句的基本用法:
PHP
echo "...";
echo "...", "...";
print 输出语句与 echo 输出语句类似,但 print 输出语句只能输出一个数据。
print 输出语句的基本用法:
PHP
print "...";
print_r 输出语句可以输出任意类型的数据,如字符串、数组等。
print_r 输出语句的基本用法:
PHP
print_r("...");
var_dump 输出语句不仅可以输出一个或多个任意类型的数据,还可以获取数据的类型和元素值。
var_dump 输出语句的基本用法:
PHP
var_dump("...");
var_dump("...", "...");
示例:输出语句
入口页面(index.php):
PHP
<?php
echo "Hello echo<br>";
print "Hello print<br>";
print_r("Hello print_r<br>");
var_dump("Hello var_dump")
示例效果:

标识符
定义标识符(如变量名、函数名、类名、方法名等)需要遵循一定的规则:
- 标识符只能由字母、数字、下划线以及 0x80-0xff 范围内(十六进制数值范围)的字符组成。
- 标识符不能以数字开头。
- 标识符用作变量名时,区分大小写。
关键字
在使用关键字时,需要注意关键字不能作为常量、函数名或类名使用。
随着 PHP 版本的更新,关键字也在不断变化,可以通过查阅 PHP 官方手册来获取最新的关键字列表。
变量、常量和表达式
变量
PHP 是弱类型语言,变量不需要实现声明,就可以直接进行赋值使用。
PHP 变量赋值分为传值赋值和引用赋值。
传值赋值是将等号右边的数据赋值给左边的变量。
传值赋值的基本用法:
PHP
$变量名 = 变量值;
示例:传值赋值
入口页面(index.php):
PHP
<?php
$userName = "多仔";
$age = 18;
echo "姓名:".$userName; // 使用.号拼接字符串
echo "<br>";
echo "年龄:".$age;
示例效果:

引用赋值时,如果其中的一个变量的值发生改变,则另一个变量的值也会发生改变。
引用赋值的基本用法:
PHP
$变量名 = &$要引用的变量名;
示例:引用赋值
入口页面(index.php):
PHP
<?php
$userName = "多仔";
$age = 18;
echo "姓名:".$userName;
echo "<br>";
echo "年龄:".$age;
echo "<br>";
// 引用赋值
$newAge = &$age;
// 修改变量$age的值
$age = 81;
// 变量$newAge的值随着变量$age的改变而改变
echo "年龄:".$newAge;
示例效果:

可变变量
PHP 提供了可变变量,可以在开发时动态地改变一个变量的名称,将另一个变量的值作为该变量的名称。
在使用可变变量时,变量的值要符合标识符规则,避免出现非法变量名的情况。
可变变量的基本用法:
PHP
$变量名 = $$变量名;
示例:可变变量
入口页面(index.php):
PHP
<?php
$userName = "多仔";
$age = 18;
$variableName = "userName";
// 相当于输出$userName
echo "姓名:".$$variableName;
示例效果:

常量
在 PHP 中,常量的值始终保持不变,常量一旦被定义就不能被修改或重新定义。
常量的命名遵循标识符的命名规则,习惯上总是使用大写字母定义常量名称。
在 PHP 中定义常量,可以使用 define 函数或 const 关键字。
define 函数的基本用法:
PHP
define(常量名, 常量值);
const 关键字的基本用法:
PHP
const 常量名 = 常量值;
示例:常量
入口页面(index.php):
PHP
<?php
define("HOST", "localhost");
define("PORT", "3306");
const USER = "root";
const PASSWORD = "root";
echo "HOST=", HOST, "<br>";
echo "PORT=", PORT, "<br>";
echo "USER=", USER, "<br>";
echo "PASSWORD=", PASSWORD, "<br>";
示例效果:

预定义常量
PHP 提供了预先定义好的常量来获取 PHP 中的信息。
PHP 中的基本预定义常量:
| 名称 | 描述 |
|---|---|
| FILE | 获取 PHP 文件的完整路径 |
| LINE | 获取 PHP 文件中当前代码的行号 |
| PHP_VERSION | 获取 PHP 的版本信息 |
| PHP_OS | 获取当前 PHP 环境的操作系统类型 |
| PHP_INT_MAX | 获取当前 PHP 环境中整型数的最大值 |
| PHP_INT_SIZE | 获取 PHP 中整型数的字长 |
| TRUE | 该常量是一个真值(true) |
| FALSE | 该常量是一个假值(false) |
| NULL | 该常量是一个空值(null) |
| E_ERROR | 表示运行时的致命性错误,值为 1 |
| E_WARNING | 表示运行时的警告错误,值为 2 |
| E_PARSE | 表示编译时的解析错误,值为 4 |
| E_NOTICE | 表示编译时的题型信息,值为 8 |
示例:预定义常量
入口页面(index.php):
PHP
<?php
echo "PHP版本号:", PHP_VERSION, "<br>";
echo "PHP文件路径:", __FILE__, "<br>";
示例效果:

表达式
表达式是 PHP 中非常重要的基石,任何有值的内容都可以理解为表达式。
PHP 的基本表达式:
PHP
<?php
$a = 1;
echo $a + 1;
$a = $a + 4;
echo $a + $b;
echo PHP_VERSION;
数据类型
常用数据类型
PHP 支持 3 类数据类型,8 种数据类型。
| 名称 | 描述 | ||
|---|---|---|---|
| 标量类型 | bool | 布尔型 | 值为 true/false,且不分大小写 |
| int | 整型 | 可用八进制、十进制、十六进制表示 在不同位数的操作系统中,取值范围不一样 当定义的整型数值大于系统的整型数所能表示的最大范围时,将会被自动转换为浮点数 | |
| float | 浮点型 | 可用标准格式和科学计数法表示 | |
| string | 字符串型 | 可用单引号、双引号、heredoc、nowdoc 表示 | |
| 复合类型 | array | 数组 | 支持单维和多维数组 |
| object | 对象 | 可以用来表示具体的实体或抽象的概念 | |
| 特殊类型 | resource | 资源 | 用于表示对外部资源的引用 外部资源可以是文件、图像、数据库连接等 |
| NULL | 空值 | 表示一个变量没有被赋予任何值 |
字符串数据类型
字符串是由连续的字母、数字或字符组成的字符序列。
在 PHP 中,可以使用单引号、双引号表示字符串。
- 单引号字符串中的变量不会被解析。
- 双引号字符串中的变量会被解析。
示例:字符串数据类型
入口页面(index.php):
PHP
<?php
$number = 100;
echo '$number=', $number;
echo '<br>';
echo "$number=", $number;
示例效果:

当双引号字符串中包含变量时,可能会出现变量与字符串混淆的问题。
为了让 PHP 识别变量,可以使用 {} 符号将变量包裹起来,{} 符号中的内容会被识别成具体的变量。
示例:使用 {} 识别变量
入口页面(index.php):
PHP
<?php
$ap = "test";
// 将$ap识别成一个变量
echo "{$ap}ple";
示例效果:

heredoc 和 nowdoc
在 PHP 中,heredoc 和 nowdoc 是两种特殊的字符串表示方式。
- heredoc 允许在其中进行变量解析和使用特殊字符。
- heredoc 中,位于开始标记和结束标记之间的变量可以被正常解析,变量不需要用连接符来拼接。
- nowdoc 类似于 heredoc ,但它不会解析变量和特殊字符。
- nowdoc 定义的变量不会被解析,会被原样输出。
使用 heredoc 定义字符串数据的基本用法:
PHP
>>>EOD
// ...
EOD;
使用 nowdoc 定义字符串数据的基本用法:
PHP
>>>'EOD'
// ...
EOD;
在使用 heredoc 和 nowdoc 时,需要注意:
- 开始标记和结束标记使用相同的字符串,通常以大写字母来写。
- 开始标记后不能出现空格或多余的字符。
- 结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。
heredoc 和 nowdoc 在处理大段的文本内容时非常有用,能使代码更加清晰易读。
示例:heredoc 和 nowdoc
入口页面(index.php):
PHP
<?php
$name = "PHP";
$heredoc = <<<EOD
<div>
<h3>$name 是世界上最好的语言</h3>
</div>
EOD;
echo $heredoc;
$nowdoc = <<<'EOD'
<div>
<h3>$name 是世界上最好的语言</h3>
</div>
EOD;
echo $nowdoc;
示例效果:

数据类型检测
为了检测数据类型是否符合预期,PHP 提供了一组 is_xxx 形式的内置函数用于检测数据类型。
数据类型检测的基本函数:
| 名称 | 描述 |
|---|---|
| is_bool($var) | 是否是布尔型 |
| is_string($var) | 是否是字符串型 |
| is_float($var) | 是否是浮点型 |
| is_int($var) | 是否是整型 |
| is_null($var) | 是否是空值 |
| is_array($var) | 是否是数组 |
| is_resource($var) | 是否是资源型 |
| is_object($var) | 是否是对象型 |
| is_numeric($var) | 是否为数字或由数字组成的字符串 |
示例:数据类型检测
入口页面(index.php):
PHP
<?php
var_dump(is_bool("1"));
echo "<br>";
var_dump(is_numeric("1"));
echo "<br>";
var_dump(is_string("1"));
示例效果:

自动数据类型转换
自动数据类型转换是指当参数与运算的两个数据类型不同时,PHP 会自动转换成相同的类型再进行运算。
自动转换成布尔型时:
- 整型 0、浮点型 0、空字符串、字符串 0 转换成布尔型时,都会被转换成 false。
- 其他数据转换成布尔型时,都会被转换成 true。
示例:自动转换成布尔型
入口页面(index.php):
PHP
<?php
var_dump(0 == false);
echo "<br>";
var_dump(0.0 == false);
echo "<br>";
var_dump('' == false);
echo "<br>";
var_dump("0" == false);
示例效果:

自动转换成整型时:
- 当浮点型数据转换成整型时,将直接对浮点数向下取整。
- 当布尔型数据转换成整型时,true 会被转换成整型 1,false 会被转换成整型 0。
- 在 PHP 8 以前,当字符串型数据转换成整型时,若字符串以数字开始,则使用该数字,否则转换为 0。
- 自 PHP 8 起,如果无法解释运算符前后的其中一个运算对象,则会抛出 TypeError。
示例:自动转换成整型
入口页面(index.php):
PHP
<?php
var_dump(true + 1);
echo "<br>";
var_dump(false + 1);
echo "<br>";
var_dump("101PHP" + 1);
echo "<br>";
var_dump("PHP101" + 1);
示例效果:

自动转换成字符串型时:
- 当布尔值数据转换成字符串型时,true 会被转换成字符串型 1,false 会被转换成空字符串。
- 当整型或浮点型数据转换成字符串型时,直接将数字转换成字符串形式。
示例:自动转换成字符串型
入口页面(index.php):
PHP
<?php
var_dump("true => " . true);
echo "<br>";
var_dump("false => " . false);
echo "<br>";
var_dump(101 . "PHP");
echo "<br>";
var_dump(3.14 . "PHP");
示例效果:

强制数据类型转换
强制数据类型转换是将某个数据或变量转换成想要的数据类型。
强制数据类型转换的基本用法:
PHP
(目标数据类型) 变量或数据
示例:强制数据类型转换
入口页面(index.php):
PHP
<?php
var_dump((boolean) -1);
echo "<br>";
var_dump((integer) "hello");
echo "<br>";
var_dump((float)false);
echo "<br>";
var_dump((string)101);
示例效果:

数据类型转换函数
PHP 提供了一系列数据类型转换函数,用于获取变量或数据的指定类型的值。
数据类型转换的基本函数:
| 名称 | 描述 |
|---|---|
| strval($var) | 获取字符串型的值 |
| intval($var) | 获取整型的值 |
| floatval($var) | 获取浮点型的值 |
| boolval($var) | 获取布尔型的值 |
示例:数据类型转换
入口页面(index.php):
PHP
<?php
var_dump(strval(false));
echo "<br>";
var_dump(intval("101"));
echo "<br>";
var_dump(floatval("0"));
echo "<br>";
var_dump(boolval("1"));
示例效果:

运算符
算数运算符
PHP 的基本算数运算符:
| 运算符 | 描述 | 运算符 | 作用 |
|---|---|---|---|
| + | 加 | - | 减 |
| * | 乘 | / | 除 |
| % | 取模 | ** | 幂运算 |
赋值运算符
PHP 的基本赋值运算符:
| 运算符 | 描述 | 运算符 | 描述 |
|---|---|---|---|
| = | 赋值 | += | 加并赋值 |
| -= | 减并赋值 | *= | 乘并赋值 |
| /= | 除并赋值 | % | 取模并赋值 |
| .= | 连接并赋值 | **= | 幂运算并赋值 |
比较运算符
PHP 的基本比较运算符:
| 运算符 | 描述 | 运算符 | 描述 |
|---|---|---|---|
| == | 等于 | != | 不等于 |
| <> | 不等于 | === | 全等 |
| !== | 不全等 | > | 大于 |
| >= | 大于等于 | < | 小于 |
| <= | 小于等于 |
使用 PHP 的比较运算符时需要注意:
- 对数据类型不相同对两个数据进行比较时,PHP 会自动将其转换成类型相同的数据再进行比较。
- === 和 !== 运算符在进行比较时,不仅要比较数值是否相等,还要比较数据类型是否相同。
- == 和 != 运算符在进行比较时,只比较数值是否相等。
三元运算符
三元运算符即三目运算符,用于实现简单的条件判断,根据条件表达式的结果执行不同的表达式。
三元运算符的基本用法:
PHP
条件表达式 ? 条件表达式成立时执行 : 条件表达式不成立时执行
逻辑运算符
PHP 的基本逻辑运算符:
| 运算符 | 描述 | 运算符 | 描述 |
|---|---|---|---|
| && | 与 | ||
| ! | 非 | xor | 异或 |
| and | 与 | or | 或 |
递增/递减运算符
PHP 基本的递增/递减运算符:
| 运算符 | 描述 | 运算符 | 描述 |
|---|---|---|---|
| ++ | 递增 | -- | 递减 |
使用 PHP 的递增/递减运算符时需要注意:
- 递增/递减运算符只针对纯数字或字母(a-z、A-Z)进行运算。
- 对于值为字母的变量,只支持递增操作。
- 当操作数为布尔型类型的数据时,递增/递减操作对其值不产生影响。
- 当操作数为 NULL 时,递增的结果为 1,递减不受影响。
字符串拼接运算符
PHP 提供了用于拼接两个字符串的运算符 . 符号。
当使用字符串拼接运算符拼接布尔型、整型、浮点型或 NULL 时,会被自动转换成字符串型。
示例:字符串拼接
入口页面(index.php):
PHP
<?php
echo "Hello"."PHP";
位运算符
PHP 中的位运算符用于对二进制位(0 和 1)进行操作。
PHP 的基本位运算符:
| 运算符 | 名称 | 描述 |
|---|---|---|
| & | 按位与 | 如果两个二进制位都为 1,则该位的运算结果为 1,否则为 0 |
| 按位或 | ||
| ~ | 按位非 | 如果二进制位时 0,则取反值 1。 如果二进制位时 1,则取反值 0 |
| ^ | 按位异或 | 如果两个二进制位相同,则该位的运算结果为 0,否则为 1 |
| << | 左移 | 将所有二进制位向左移动 1 位,右边的空位补 0,左边移走的部分舍去 |
| >> | 右移 | 将所有二进制位向右移动 1 位,左边的空位根据原数的符号补位 0 或 1,原数是负数就补 1,原数是正数就补 0 |
示例:位运算符
入口页面(index.php):
PHP
<?php
$m = 1; // 二进制为01
$n = 2; // 二进制为10
// 按位与
$mn_and = $m & $n;
echo "按位与结果:" . $mn_and . "<br>";
// 按位或
$mn_or = $m | $n;
echo "按位或结果:" . $mn_or . "<br>";
// 按位异或
$mn_xor = $m ^ $n;
echo "按位异或结果:" . $mn_xor . "<br>";
// 按位取反
$m_not = ~$m;
echo "按位取反结果:" . $m_not . "<br>";
$m = 3;
// 左移
$m_left_shift = $m << 1;
echo "左移结果:" . $m_left_shift . "<br>";
$m = 8;
// 右移
$m_right_shift = $m >> 2;
echo "右移结果:" . $m_right_shift . "<br>";
示例效果:

位运算可以用于优化一些特定的操作,例如在处理标志位、进行高效的位掩码操作或利用位移实现快速的乘除运算等场景中。
错误控制运算符
错误控制运算符用于在可能出现错误的表达式前使用,不会直接将错误显示给用户。
错误控制运算符的基本用法:
php
@表达式;
在 PHP8 中,错误控制运算符已经被弃用。
流程控制
分支结构
PHP 中的分支结构常用的有 if、if-else、if-elseif-else、switch-case。
if 语句的基本用法:
PHP
if(条件表达式) {
// ...
}
if-else 语句的基本用法:
PHP
if(条件表达式) {
// ...
} else {
// ...
}
if-elseif-else 语句的基本用法:
PHP
if(条件表达式) {
// ...
} elseif(条件表达式) {
// ...
} else {
// ...
}
switch-case 语句的基本用法:
PHP
switch(表达式) {
case 值1:
// ...
break;
case 值2:
// ...
break;
// ...
default:
// ...
}
循环结构
PHP 中的循环结构常用的有 while、do-while、for。
while 语句的基本用法:
PHP
while(循环条件) {
// ...
}
do-while 语句的基本用法:
PHP
do{
// ...
} while(循环条件);
for 语句的基本用法:
PHP
for(初始化表达式; 循环条件; 操作表达式) {
// ...
}
跳转语句
PHP 中的跳转语句常用的有 berak、continue。
- break 语句在循环语句中用于终止、跳出循环。
- continue 语句在循环语句中用于结束本次循环,开始下一轮循环。
流程控制代替语句
在 HTML 模板中嵌入 PHP 代码时,流程控制替代语句是一种可读性更好的语法。
流程控制语句和流程控制替代语句的比较:
| 流程控制语句 | 流程控制替代语句 |
|---|---|
| if(条件表达式) { // ... } | if(条件表达式): // ... endif; |
| switch(表达式) { // ... } | switch(表达式): // ... endswitch; |
| while(循环条件) { // ... } | while(循环条件): // ... endwhile; |
| for(初始化表达式; 循环条件; 操作表达式) { // ... } | for(初始化表达式; 循环条件; 操作表达式): // ... endfor; |
示例:流程控制替代语句
入口页面(index.php):
PHP
<h3>10以内的偶数列表</h3>
<ul>
<?php
for ($i = 0; $i < 10; $i++) {
if ($i % 2 == 0) {
echo "<li>$i</li>";
}
}
?>
</ul>
<h3>10以内的偶数列表</h3>
<ul>
<?php for ($i = 0; $i < 10; $i++): ?>
<?php if($i % 2 == 0): ?>
<li><?php echo $i ?></li>
<?php endif; ?>
<?php endfor; ?>
</ul>
示例效果:

文件包含语句
include 和 require
include 语句和 require 语句都可以引入一个外部文件。
- include 语句和 require 的用法类似。
- 当引入外部文件出现错误时,icnlude 语句会发出警告信息,程序继续执行。
- 当引入外部文件出现错误时,require 语句会抛出致命错误,程序停止运行。
使用 include 语句引入公共代码的基本用法:
PHP
include '完整路径文件名';
include('完整路径文件名');
使用 require 语句引入公共代码的基本用法:
PHP
require '完整路径文件名';
require('完整路径文件名');
示例:include 和 require
工具类(util.php):
PHP
<?php
echo "这是工具类 util.php";
入口页面(index.php):
PHP
<?php
include './util.php';
echo "<br>Hello PHP";
示例效果:

include_once 和 require_once
include_once 语句和 require_once 语句也可以引入一个外部文件。
- 使用 include_once 语句和 require_once 语句引入外部文件时,PHP 会检查该文件是否在程序中已经被引入。
- 如果该已经被引入,则外部文件不会被再次引入,避免重复引入同一个文件。
示例:include_once 和 require_once
入口页面(index.php):
PHP
<?php
echo "<p>使用include引入util.php三次:</p>";
include './util.php';
echo "<br>";
include './util.php';
echo "<br>";
include './util.php';
echo "<br>";
echo "<p>使用include_once引入util.php三次:</p>";
// 上文已经引入util.php,此处不再重复引入
include_once './util.php';
echo "<br>";
include_once './util.php';
echo "<br>";
include_once './util.php';
示例效果:
