基本语法
PHP 标记
PHP 代码可以嵌入 HTML 中使用,为了区分 PHP 代码和 HTML 代码,需要使用 PHP 标记对 PHP 代码进行标识,PHP 的标记分为标准标记和短标记。
PHP 标记的基本用法:
<?php 代码块 ?> <? 代码块 ?> // 不推荐使用,需要在php.ini中启用short_open_tag <?= 输出内容 ?>示例:PHP 标记
入口页面(index.php):
<h1><?php echo "Hello PHP!" ?></h1> <h1><?= "Hello PHP!" ?></h1>示例效果:
在 PHP 标记后面,如果没有除 PHP 以外的其他代码,标记末尾的 ?> 符号可以省略。
注释
在 PHP 开发中,为了方便开发人员阅读和维护代码,可以添加注释对代码进行解释说明。
单行注释的基本用法:
// ... # ...多行注释的基本用法:
/* .... */输出语句
PHP 提供了一系列的输出语句,常用的输出语句有 echo、print、print_r、var_dump 等。
echo 输出语句用于输出字符串,如果输出其他类型的数据,会自动转换成字符串。
echo 输出语句的基本用法:
echo "..."; echo "...", "...";print 输出语句与 echo 输出语句类似,但 print 输出语句只能输出一个数据。
print 输出语句的基本用法:
print "...";print_r 输出语句可以输出任意类型的数据,如字符串、数组等。
print_r 输出语句的基本用法:
print_r("...");var_dump 输出语句不仅可以输出一个或多个任意类型的数据,还可以获取数据的类型和元素值。
var_dump 输出语句的基本用法:
var_dump("..."); var_dump("...", "...");示例:输出语句
入口页面(index.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 变量赋值分为传值赋值和引用赋值。
传值赋值是将等号右边的数据赋值给左边的变量。
传值赋值的基本用法:
$变量名 = 变量值;示例:传值赋值
入口页面(index.php):
<?php $userName = "多仔"; $age = 18; echo "姓名:".$userName; // 使用.号拼接字符串 echo "<br>"; echo "年龄:".$age;示例效果:
引用赋值时,如果其中的一个变量的值发生改变,则另一个变量的值也会发生改变。
引用赋值的基本用法:
$变量名 = &$要引用的变量名;示例:引用赋值
入口页面(index.php):
<?php $userName = "多仔"; $age = 18; echo "姓名:".$userName; echo "<br>"; echo "年龄:".$age; echo "<br>"; // 引用赋值 $newAge = &$age; // 修改变量$age的值 $age = 81; // 变量$newAge的值随着变量$age的改变而改变 echo "年龄:".$newAge;示例效果:
可变变量
PHP 提供了可变变量,可以在开发时动态地改变一个变量的名称,将另一个变量的值作为该变量的名称。
在使用可变变量时,变量的值要符合标识符规则,避免出现非法变量名的情况。
可变变量的基本用法:
$变量名 = $$变量名;示例:可变变量
入口页面(index.php):
<?php $userName = "多仔"; $age = 18; $variableName = "userName"; // 相当于输出$userName echo "姓名:".$$variableName;示例效果:
常量
在 PHP 中,常量的值始终保持不变,常量一旦被定义就不能被修改或重新定义。
常量的命名遵循标识符的命名规则,习惯上总是使用大写字母定义常量名称。
在 PHP 中定义常量,可以使用 define 函数或 const 关键字。
define 函数的基本用法:
define(常量名, 常量值);const 关键字的基本用法:
const 常量名 = 常量值;示例:常量
入口页面(index.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 echo "PHP版本号:", PHP_VERSION, "<br>"; echo "PHP文件路径:", __FILE__, "<br>";示例效果:
表达式
表达式是 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 $number = 100; echo '$number=', $number; echo '<br>'; echo "$number=", $number;示例效果:
当双引号字符串中包含变量时,可能会出现变量与字符串混淆的问题。
为了让 PHP 识别变量,可以使用 {} 符号将变量包裹起来,{} 符号中的内容会被识别成具体的变量。
示例:使用 {} 识别变量
入口页面(index.php):
<?php $ap = "test"; // 将$ap识别成一个变量 echo "{$ap}ple";示例效果:
heredoc 和 nowdoc
在 PHP 中,heredoc 和 nowdoc 是两种特殊的字符串表示方式。
- heredoc 允许在其中进行变量解析和使用特殊字符。
- heredoc 中,位于开始标记和结束标记之间的变量可以被正常解析,变量不需要用连接符来拼接。
- nowdoc 类似于 heredoc ,但它不会解析变量和特殊字符。
- nowdoc 定义的变量不会被解析,会被原样输出。
使用 heredoc 定义字符串数据的基本用法:
>>>EOD // ... EOD;使用 nowdoc 定义字符串数据的基本用法:
>>>'EOD' // ... EOD;在使用 heredoc 和 nowdoc 时,需要注意:
- 开始标记和结束标记使用相同的字符串,通常以大写字母来写。
- 开始标记后不能出现空格或多余的字符。
- 结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。
heredoc 和 nowdoc 在处理大段的文本内容时非常有用,能使代码更加清晰易读。
示例:heredoc 和 nowdoc
入口页面(index.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 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 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 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 var_dump("true => " . true); echo "<br>"; var_dump("false => " . false); echo "<br>"; var_dump(101 . "PHP"); echo "<br>"; var_dump(3.14 . "PHP");示例效果:
强制数据类型转换
强制数据类型转换是将某个数据或变量转换成想要的数据类型。
强制数据类型转换的基本用法:
(目标数据类型) 变量或数据示例:强制数据类型转换
入口页面(index.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 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 的基本逻辑运算符:
| 运算符 | 描述 | 运算符 | 描述 |
|---|---|---|---|
| && | 与 | ||
| ! | 非 | xor | 异或 |
| and | 与 | or | 或 |
递增/递减运算符
PHP 基本的递增/递减运算符:
| 运算符 | 描述 | 运算符 | 描述 |
|---|---|---|---|
| ++ | 递增 | – | 递减 |
使用 PHP 的递增/递减运算符时需要注意:
- 递增/递减运算符只针对纯数字或字母(a-z、A-Z)进行运算。
- 对于值为字母的变量,只支持递增操作。
- 当操作数为布尔型类型的数据时,递增/递减操作对其值不产生影响。
- 当操作数为 NULL 时,递增的结果为 1,递减不受影响。
字符串拼接运算符
PHP 提供了用于拼接两个字符串的运算符 . 符号。
当使用字符串拼接运算符拼接布尔型、整型、浮点型或 NULL 时,会被自动转换成字符串型。
示例:字符串拼接
入口页面(index.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 $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>";示例效果:
位运算可以用于优化一些特定的操作,例如在处理标志位、进行高效的位掩码操作或利用位移实现快速的乘除运算等场景中。
错误控制运算符
错误控制运算符用于在可能出现错误的表达式前使用,不会直接将错误显示给用户。
错误控制运算符的基本用法:
@表达式;在 PHP8 中,错误控制运算符已经被弃用。
流程控制
分支结构
PHP 中的分支结构常用的有 if、if-else、if-elseif-else、switch-case。
if 语句的基本用法:
if(条件表达式) { // ... }if-else 语句的基本用法:
if(条件表达式) { // ... } else { // ... }if-elseif-else 语句的基本用法:
if(条件表达式) { // ... } elseif(条件表达式) { // ... } else { // ... }switch-case 语句的基本用法:
switch(表达式) { case 值1: // ... break; case 值2: // ... break; // ... default: // ... }循环结构
PHP 中的循环结构常用的有 while、do-while、for。
while 语句的基本用法:
while(循环条件) { // ... }do-while 语句的基本用法:
do{ // ... } while(循环条件);for 语句的基本用法:
for(初始化表达式; 循环条件; 操作表达式) { // ... }跳转语句
PHP 中的跳转语句常用的有 berak、continue。
- break 语句在循环语句中用于终止、跳出循环。
- continue 语句在循环语句中用于结束本次循环,开始下一轮循环。
流程控制代替语句
在 HTML 模板中嵌入 PHP 代码时,流程控制替代语句是一种可读性更好的语法。
流程控制语句和流程控制替代语句的比较:
| 流程控制语句 | 流程控制替代语句 |
|---|---|
| if(条件表达式) { // … } | if(条件表达式): // … endif; |
| switch(表达式) { // … } | switch(表达式): // … endswitch; |
| while(循环条件) { // … } | while(循环条件): // … endwhile; |
| for(初始化表达式; 循环条件; 操作表达式) { // … } | for(初始化表达式; 循环条件; 操作表达式): // … endfor; |
示例:流程控制替代语句
入口页面(index.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 语句引入公共代码的基本用法:
include '完整路径文件名'; include('完整路径文件名');使用 require 语句引入公共代码的基本用法:
require '完整路径文件名'; require('完整路径文件名');示例:include 和 require
工具类(util.php):
<?php echo "这是工具类 util.php";入口页面(index.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 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';示例效果: