PHP 零基础教程

PHP 语句与分号

在 PHP 中,语句(Statement)是让计算机执行的完整指令。这些指令多种多样,包括声明变量、执行算术运算、调用函数,或是定义控制结构。在 PHP 中,每一条语句通常都以分号 (;) 结尾,它向 PHP 解析器发出信号,表示当前指令已经结束。

1. 理解 PHP 语句

PHP 语句是最小的独立执行单元。你可以把它想象成人类语言中的一个完整句子;它传达了一个完整的思想或动作。如果没有正确的语句终止符,PHP 解释器就会误解你的代码,从而导致语法错误或意料之外的运行结果。

2. 语句的基本结构

大多数 PHP 语句由一个“表达式”和一个“分号”组成。表达式是任何可以计算出一个值的有效代码单元。

<?php
// 这是一条语句,将字符串 "Hello" 赋值给变量 $message
$message = "Hello"; 

// 这是一条语句,将 $message 的值输出到屏幕
echo $message; 

// 这是一条语句,执行算术运算并将结果赋值
$sum = 10 + 5; 

// 这是一条语句,调用了 PHP 的内置函数
var_dump($sum); 
?>

在上面的例子中,$message = "Hello";echo $message;$sum = 10 + 5; 以及 var_dump($sum); 都是完整的语句。每一条都明确告诉 PHP 引擎去执行某个特定的操作。

3. 代码排版与结构规范

3.1 单行包含多个语句(不推荐)

虽然在技术上,你可以通过用分号隔开,将多个语句写在同一行,但这种做法会显著降低代码的可读性,在专业的开发中通常是极其不推荐的。

<?php
$firstName = "John"; $lastName = "Doe"; echo $firstName . " " . $lastName;
?>

上面的代码在功能上是完全正确的,但比起将每条语句单独写在一行,它更难阅读和调试。现代编程规范非常强调代码的清晰度和可维护性。

3.2 控制结构中的语句

诸如 ifforwhile 以及 function 声明等控制结构,其代码块内部也会包含语句。如果代码块(包含在花括号 {} 内)包含多条指令,该代码块本身被视为一个大的逻辑单元。然而,代码块内部的每一条指令仍然必须以分号结尾。

<?php
$age = 20;
if ($age >= 18) { // 这个 'if' 结构本身构成一个逻辑单元
    echo "你是一个成年人。"; // 这是 'if' 代码块内部的一条独立语句
    $canVote = true; // 这是 'if' 代码块内部的另一条独立语句
}
?>

在这里,整个 if 代码块(包括它的条件和花括号内的代码)形成了一个更大的逻辑单元。在这个单元内部,echo "你是一个成年人。";$canVote = true; 都是单独的语句,每一条都需要分号。

4. 分号的关键作用

分号 (;) 充当了 PHP 语句的“终止符”。它明确地告诉 PHP 解析器一条指令在哪里结束,下一条指令从哪里开始。这对于解析器正确理解和执行你的代码至关重要。

4.1 分号何时可以省略(以及为什么你仍应保留它)

在一种主要例外情况下,分号在技术上是可选的:紧挨着 PHP 闭合标签 (?>) 之前,或者在 PHP 脚本文件的最末尾。

<?php
$name = "Alice" // 在闭合标签之前,此处不需要分号
?> 
<?php
echo "Hello World" // 如果没有闭合标签且处于文件最末尾,此处也不需要分号

尽管在这些特定情况下分号是可选的,但始终保留分号是业界广泛采用的最佳实践。原因如下:

  • 一致性: 保持一致的代码风格使你的代码具有可预测性,也让其他人(以及未来的你自己)更容易阅读和理解。
  • 防止错误: 如果你后来在一个“可选”分号的位置之后又添加了一行代码,忘记给上一行补充分号就会导致语法错误。始终添加分号可以防止这种低级失误。
  • 可读性: 显式地终止每一条语句可以提高清晰度,即使 PHP 解析器能够自行推断出来。

4.2 常见的与分号相关的错误

“忘记写分号”是开发者在 PHP 中遇到的最频繁的语法错误之一。报错信息通常会指向缺失分号的“下一行”,因为解析器会继续读取下一行,试图将其解释为上一条(未终止)语句的一部分。

<?php
$item = "笔记本电脑" 
echo "该物品是:" . $item;
?>

在这个例子中,$item = "笔记本电脑" 缺少了一个分号。PHP 解释器很可能会在 echo "该物品是:" . $item; 这一行抛出一个解析错误,因为它试图将 echo 与上一行结合起来,导致了一条无效的语句。错误信息可能看起来像这样:Parse error: syntax error, unexpected 'echo' (T_ECHO) in /path/to/script.php on line X

5. 综合实战案例

让我们来看几个更全面的例子,演示语句的正确终止。

5.1 案例 1:变量声明与输出

<?php
// 声明一个字符串变量并赋值
$productName = "智能手机 X"; 

// 声明一个整数变量表示数量
$quantity = 2; 

// 计算总价(假设这是一个单价)
$pricePerItem = 499.99; // 定义一个浮点数变量
$totalPrice = $quantity * $pricePerItem; // 计算总价

// 输出产品名称和数量
echo "产品:" . $productName . "<br>"; 
echo "数量:" . $quantity . "<br>"; 

// 输出格式化后的总价
echo "总价:$" . number_format($totalPrice, 2) . "<br>"; 
?>

在上面的例子中,每一行以分号结尾的都是一条独立的 PHP 语句。number_format() 是一个内置的 PHP 函数,这里用来将总价格式化为保留两位小数,我们将在后续模块中进一步探索这个概念。

5.2 案例 2:在包含 HTML 的代码中使用分号

这个例子展示了 PHP 代码如何与 HTML 混合编写,以及 PHP 代码块内分号的重要性。

<!DOCTYPE html>
<html>
<head>
    <title>PHP 语句演示</title>
</head>
<body>
    <h1>欢迎!</h1>
    <?php
    $userName = "访客"; // 语句 1:变量赋值
    $greeting = "你好," . $userName . "!"; // 语句 2:字符串拼接并赋值
    echo $greeting; // 语句 3:输出问候语
    ?>
    <p>这是一个在 PHP 代码块之外的段落。</p>
    <?php
    $currentYear = date("Y"); // 语句 4:调用 date() 函数并赋值给变量。'date()' 将在后续模块中讲解。
    echo "<p>© " . $currentYear . " 我的公司</p>"; // 语句 5:输出版权信息
    ?>
</body>
</html>

在这个混合了 HTML 和 PHP 的文件中,每个 PHP 代码块 (<?php ... ?>) 包含多条语句,每条语句都正确地以分号终止。这使得 PHP 解析器能够在渲染最终的 HTML 之前,独立处理这些代码块内的指令。