PHP语法

掌握PHP的基本语法规则和结构

PHP基本语法规则

PHP脚本在服务器上执行,然后将纯HTML结果发送回浏览器。PHP脚本可以放在文档中的任何位置。

基本规则: PHP代码以 <?php 开始,以 ?> 结束,每条语句以分号;结尾。

PHP文件结构

一个典型的PHP文件包含HTML标签和一些PHP脚本代码。PHP代码可以嵌入到HTML中的任何位置。

PHP与服务器交互

PHP是一种服务器端脚本语言,意味着它在服务器上执行,客户端接收到的只是执行后的结果(通常是HTML)。

PHP标签

PHP支持多种标签格式来标识PHP代码块:

1. 标准标签(推荐)

标准标签
<?php
echo "Hello World!";
?>

2. 短标签(需要开启short_open_tag)

短标签
<?
echo "Hello World!";
?>

3. ASP风格标签(需要开启asp_tags)

ASP风格标签
<%
echo "Hello World!";
%>
注意: 为了代码的可移植性和兼容性,强烈建议使用标准标签<?php ?>

短输出语法

PHP提供了一个短输出语法,用于快速输出单个表达式的结果。

短输出语法
<?= "Hello World!" ?>

这等同于:

等价代码
<?php echo "Hello World!"; ?>

PHP语句

PHP脚本由一系列语句组成,每条语句以分号;结尾。

语句示例
<?php
echo "第一条语句";
echo "第二条语句";
$name = "张三";
?>
提示: PHP语句对大小写不敏感,但变量名对大小写敏感。

语句的类型

PHP语句可以分为多种类型,包括:

  • 赋值语句: 将值赋给变量
  • 函数调用语句: 调用函数执行操作
  • 条件语句: 根据条件执行不同的代码块
  • 循环语句: 重复执行代码块
  • 返回语句: 从函数返回值

代码块

在PHP中,可以使用花括号{}来创建代码块,通常用于控制结构和函数。

代码块示例
<?php
// if语句的代码块
if ($age > 18) {
    echo "成年人";
    $adult = true;
}

// 函数的代码块
function sayHello() {
    echo "Hello!";
}
?>

代码块的作用域

在PHP中,代码块不会创建新的作用域(除了函数和方法)。在代码块内部定义的变量在代码块外部仍然可见。

代码块作用域示例
<?php
$x = 10;
if (true) {
    $y = 20; // 在代码块内部定义的变量
}
echo $y; // 可以访问,输出20
?>

PHP与HTML混合

PHP代码可以嵌入到HTML中的任何位置。

PHP与HTML混合示例
<!DOCTYPE html>
<html>
<head>
    <title>
        <?php echo "我的网站"; ?>
    </title>
</head>
<body>
    <h1>
        <?php
        $name = "访客";
        echo "欢迎, " . $name;
        ?>
    </h1>
    
    <?php if ($isLoggedIn): ?>
        <p>您已登录</p>
    <?php else: ?>
        <p>请先登录</p>
    <?php endif; ?>
</body>
</html>

PHP在HTML中的最佳位置

虽然PHP可以嵌入到HTML的任何位置,但为了代码的可维护性,建议:

  • 将大部分PHP逻辑放在HTML之前
  • 在HTML中只使用PHP进行简单的输出和条件判断
  • 避免在HTML中嵌入复杂的PHP逻辑
推荐的PHP与HTML混合方式
<?php
// 在HTML之前处理逻辑
$pageTitle = "我的网站";
$userName = "张三";
$isLoggedIn = true;
?>

<!DOCTYPE html>
<html>
<head>
    <title><?= $pageTitle ?></title>
</head>
<body>
    <h1>欢迎, <?= $userName ?></h1>
    
    <?php if ($isLoggedIn): ?>
        <p>您已登录</p>
    <?php else: ?>
        <p>请先登录</p>
    <?php endif; ?>
</body>
</html>

PHP指令分隔符

PHP需要在每个语句的结尾加上分号;。但在PHP结束标签前的最后一个语句可以省略分号。

分号使用示例
<?php
echo "第一条语句";  // 需要分号
echo "第二条语句";  // 需要分号
echo "最后一条语句"   // 可以省略分号(但不推荐)
?>
最佳实践: 始终在每个PHP语句的结尾使用分号,即使是在PHP结束标签前。

常见的分号错误

忘记分号是PHP初学者常见的错误之一,会导致解析错误。

分号错误示例
<?php
echo "Hello World"  // 缺少分号
$name = "张三"       // 缺少分号
echo "欢迎, $name";
?>

上面的代码会产生解析错误,因为前两个语句缺少分号。

空白字符和代码格式

PHP对空白字符(空格、制表符、换行)不敏感,但良好的代码格式可以提高可读性。

良好的代码格式
<?php
// 良好的格式
function calculateSum($a, $b) {
    $result = $a + $b;
    return $result;
}

// 不良的格式(虽然能运行,但难以阅读)
function calculateSum($a,$b){$result=$a+$b;return $result;}
?>

代码格式化指南

遵循一致的代码格式化风格可以使代码更易于阅读和维护:

  • 使用4个空格或1个制表符进行缩进
  • 在运算符前后添加空格
  • 在逗号后添加空格
  • 使用空行分隔逻辑相关的代码块
  • 适当添加注释
良好格式化的代码
<?php
// 函数定义
function calculateAverage($numbers) {
    $sum = 0;
    $count = count($numbers);
    
    // 计算总和
    foreach ($numbers as $number) {
        $sum += $number;
    }
    
    // 计算平均值
    if ($count > 0) {
        return $sum / $count;
    } else {
        return 0;
    }
}

// 使用函数
$scores = [85, 92, 78, 96, 88];
$average = calculateAverage($scores);

echo "平均分: $average";
?>

注释

注释是代码中的重要组成部分,用于解释代码的功能和目的。PHP支持三种注释风格。

单行注释

单行注释示例
<?php
// 这是单行注释
# 这也是单行注释(不常用)

$name = "张三"; // 行末注释
?>

多行注释

多行注释示例
<?php
/*
 * 这是多行注释
 * 可以跨越多行
 * 用于详细说明代码块
 */

function calculateSum($a, $b) {
    /*
     * 计算两个数的和
     * 参数: $a - 第一个数
     *       $b - 第二个数
     * 返回: 两个数的和
     */
    return $a + $b;
}
?>

文档注释

文档注释是一种特殊的多行注释,用于生成API文档。

文档注释示例
<?php
/**
 * 计算两个数的和
 *
 * @param int $a 第一个数
 * @param int $b 第二个数
 * @return int 两个数的和
 */
function add($a, $b) {
    return $a + $b;
}
?>

PHP语法检查

在部署PHP代码之前,应该检查语法是否正确。PHP提供了命令行工具来检查语法。

命令行语法检查
php -l filename.php

如果语法正确,将显示:

No syntax errors detected in filename.php

如果存在语法错误,将显示错误信息:

PHP Parse error:  syntax error, unexpected 'echo' (T_ECHO) in filename.php on line 3

常见的语法错误

  • 缺少分号
  • 括号不匹配
  • 引号不匹配
  • 变量名拼写错误
  • 使用未定义的函数

PHP语法最佳实践

遵循最佳实践可以编写更清晰、更易维护的代码。

代码组织

良好的代码组织可以提高可读性和可维护性。

代码组织示例
<?php
// 1. 配置和常量定义
define('APP_NAME', '我的应用');
define('DEBUG_MODE', true);

// 2. 包含文件
require_once 'config.php';
include 'functions.php';

// 3. 函数定义
function processData($data) {
    // 处理数据
    return trim($data);
}

// 4. 主逻辑
$input = $_POST['input'] ?? '';
$result = processData($input);

// 5. 输出
echo "处理结果: $result";
?>

错误处理

适当的错误处理可以提高代码的健壮性。

错误处理示例
<?php
// 启用错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 检查文件是否存在
$filename = 'data.txt';
if (!file_exists($filename)) {
    trigger_error("文件 $filename 不存在", E_USER_WARNING);
    exit;
}

// 安全地读取文件
$content = file_get_contents($filename);
if ($content === false) {
    trigger_error("无法读取文件 $filename", E_USER_ERROR);
    exit;
}

echo "文件内容: $content";
?>

实践练习

创建一个PHP文件,实现以下功能:

  1. 使用标准PHP标签
  2. 输出一个标题和一段文字
  3. 在HTML中嵌入PHP变量
  4. 使用if语句根据条件显示不同内容
  5. 添加适当的注释
  6. 使用良好的代码格式
提示: 可以创建一个简单的用户欢迎页面,根据时间显示不同的问候语。
实践练习示例
<?php
/*
 * 用户欢迎页面
 * 根据时间显示不同的问候语
 */

// 获取当前小时
$currentHour = date('H');

// 根据时间设置问候语
if ($currentHour < 12) {
    $greeting = "早上好";
} elseif ($currentHour < 18) {
    $greeting = "下午好";
} else {
    $greeting = "晚上好";
}

// 用户信息
$userName = "张三";
$loginCount = 15;
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title><?= $greeting ?><?= $userName ?></title>
</head>
<body>
    <h1><?= $greeting ?><?= $userName ?></h1>
    <p>这是您第 <?= $loginCount ?> 次登录。</p>
    
    <?php if ($loginCount > 10): ?>
        <p>感谢您的持续支持!</p>
    <?php else: ?>
        <p>欢迎新用户!</p>
    <?php endif; ?>
</body>
</html>