PHP 基础教程:快速入门 – wiki基地


PHP 基础教程:快速入门

PHP 是一种广泛使用的开源服务器端脚本语言,尤其适合 Web 开发,并且可以嵌入 HTML 中。它以其易学、高效和强大的特性,成为了构建动态网站和 Web 应用程序的主流技术之一。无论你是编程新手,还是希望扩展技能栈的开发者,学习 PHP 都是一个非常有价值的选择。

本教程将带你从零开始,快速掌握 PHP 的核心基础知识,包括环境搭建、基本语法、变量、数据类型、运算符、控制结构、函数、数组以及如何与 HTML 交互等。

目录

  1. PHP 是什么?为何选择 PHP?
    • 什么是 PHP?
    • PHP 的优势
    • PHP 的应用场景
  2. 准备开发环境
    • 理解服务器和客户端
    • 选择开发环境集成包 (XAMPP, WAMP, MAMP)
    • 安装并启动环境
    • 创建你的第一个 PHP 文件
  3. 编写你的第一个 PHP 程序:”Hello, World!”
    • PHP 代码标记
    • echoprint 输出
    • 运行 PHP 文件
  4. PHP 基础语法
    • 语句结束符 (分号)
    • 注释
    • 对大小写敏感性
    • 空白符
  5. 变量和数据类型
    • 什么是变量?
    • 声明和使用变量
    • PHP 的基本数据类型
      • 标量类型 (Scalar Types)
      • 复合类型 (Compound Types)
      • 特殊类型 (Special Types)
    • 类型转换 (Type Juggling)
    • var_dump() 函数
  6. 常量
    • 定义常量 (define())
    • 预定义常量
  7. 运算符
    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 字符串运算符
    • 递增/递减运算符
    • 其他运算符 (了解)
  8. 控制结构:条件判断
    • if 语句
    • if...else 语句
    • if...elseif...else 语句
    • switch 语句
  9. 控制结构:循环
    • while 循环
    • do...while 循环
    • for 循环
    • foreach 循环 (用于遍历数组)
  10. 函数
    • 什么是函数?为何使用函数?
    • 定义用户自定义函数
    • 调用函数
    • 函数参数 (带默认值)
    • 返回值 (return)
    • 内置函数 (了解)
  11. 数组 (Arrays)
    • 什么是数组?
    • 索引数组
    • 关联数组
    • 访问数组元素
    • 遍历数组 (foreach)
    • 常用的数组函数
  12. 文件引入 (File Inclusion)
    • includerequire
    • include_oncerequire_once
  13. PHP 与 HTML 的交互
    • 在 HTML 中嵌入 PHP 代码
    • 处理表单数据 ($_GET, $_POST)
  14. 错误处理与调试基础
    • 开启错误报告
    • 使用 var_dump()print_r()

1. PHP 是什么?为何选择 PHP?

什么是 PHP?

PHP (全称:PHP: Hypertext Preprocessor,超文本预处理器) 是一种服务器端的脚本语言。这意味着 PHP 代码在服务器上执行,而不是在用户的浏览器中执行。服务器处理 PHP 代码后,会生成标准的 HTML、CSS、JavaScript 等内容,再发送给用户的浏览器显示。

PHP 最初由 Rasmus Lerdorf 在 1994 年创建,作为一种个人主页工具 (Personal Home Page Tools),后来发展成为一种强大的通用脚本语言。

PHP 的优势

  • 易学易用: 语法结构清晰,与 C、Java、Perl 等语言有相似之处,学习曲线平缓,适合初学者入门。
  • 开源免费: PHP 及其相关的许多工具、库都是开源免费的,降低了开发成本。
  • 广泛使用: 拥有庞大的社区和丰富的资源,遇到问题容易找到解决方案。许多知名的网站和应用都使用 PHP 构建,例如 WordPress, Drupal, Joomla!, Magento 等。
  • 跨平台: 可以运行在 Windows, Linux, macOS 等多种操作系统上。
  • 高效稳定: PHP 引擎 (如 Zend Engine) 不断优化,性能持续提升。PHP 7 及更高版本在性能上有了显著飞跃。
  • 强大的数据库支持: PHP 支持几乎所有主流的数据库,如 MySQL, PostgreSQL, SQLite 等,与 MySQL 的结合尤其紧密和流行。
  • 丰富的函数库: PHP 提供了大量的内置函数,涵盖文件系统、网络通信、数据库操作、图像处理等各种功能。

PHP 的应用场景

  • 动态网站开发: 这是 PHP 最主要的用途,从简单的博客到复杂的电子商务平台都可以用 PHP 实现。
  • Web 应用开发: 构建各种在线服务、管理系统、社交网络应用等。
  • 命令行脚本: PHP 也可以作为一种通用的脚本语言在命令行下执行,用于自动化任务、数据处理等。
  • 桌面应用开发 (较少用): 虽然不常见,但通过 PHP-GTK 等扩展也可以开发桌面应用。

2. 准备开发环境

要运行 PHP 代码,你需要一个能够解析 PHP 的服务器环境。最常见的方式是搭建一个 Web 服务器 (如 Apache 或 Nginx),安装 PHP 解释器,并配置它们协同工作。对于初学者来说,使用集成开发环境 (Integrated Development Environment) 软件包是最便捷的方式。

理解服务器和客户端

  • 客户端 (Client): 通常是用户的浏览器 (Chrome, Firefox, Safari 等),向服务器发送请求 (例如,访问一个网页)。
  • 服务器 (Server): 一台运行着特定软件的计算机。对于 Web 开发,服务器软件通常包括:
    • Web 服务器软件: 接收客户端的请求,并将文件发送回去 (例如 Apache, Nginx)。
    • 数据库服务器软件: 存储和管理数据 (例如 MySQL, PostgreSQL)。
    • PHP 解释器: 解析和执行 PHP 代码。

PHP 代码就在服务器端执行,生成 HTML 等内容后发送给客户端的浏览器。

选择开发环境集成包

为了避免单独安装配置 Web 服务器、PHP 和数据库的复杂过程,推荐使用以下集成包:

  • XAMPP: (Cross-Platform, Apache, MySQL, PHP, Perl) 适用于 Windows, macOS, Linux。功能齐全,包含 Apache, MySQL, PHP, Perl 以及 phpMyAdmin (用于管理 MySQL 数据库)。
  • WAMP: (Windows, Apache, MySQL, PHP) 适用于 Windows。
  • MAMP: (macOS, Apache, MySQL, PHP) 适用于 macOS。

选择其中一个,下载对应操作系统的版本。以 XAMPP 为例,它是最常用的。

安装并启动环境 (以 XAMPP 为例)

  1. 下载 XAMPP: 访问 Apache Friends 官网 (https://www.apachefriends.org/) 下载最新版本的 XAMPP。
  2. 安装: 运行下载的安装程序。安装过程通常比较简单,可以选择安装目录和组件 (默认即可)。在 Windows 上,安装时可能会提示关闭 UAC (用户账户控制) 或防火墙警告,根据提示操作即可。
  3. 启动控制面板: 安装完成后,找到 XAMPP Control Panel 并启动。
  4. 启动模块: 在控制面板中,你需要启动 Apache 和 MySQL 模块。点击对应的 “Start” 按钮。如果启动成功,模块名称会变成绿色,并显示进程 ID 和端口号 (Apache 通常是 80 或 443,MySQL 通常是 3306)。如果端口被占用,需要修改配置或停止占用该端口的程序。
  5. 测试: 打开你的浏览器,访问 http://localhost/http://127.0.0.1/。如果看到 XAMPP 的欢迎页面,说明 Apache 服务器已成功启动。

创建你的第一个 PHP 文件

安装并启动服务器后,你需要知道在哪里放置你的 PHP 文件。在 XAMPP 中,这个目录通常是安装目录下的 htdocs 文件夹。对于 WAMP,通常是 www 文件夹;对于 MAMP,通常是 htdocswww 文件夹 (可在 MAMP Preference 中配置)。

htdocs 文件夹内创建一个新的文本文件,命名为 hello.php (文件名后缀必须是 .php)。使用任何文本编辑器或代码编辑器 (如 VS Code, Sublime Text, Notepad++) 打开这个文件。

3. 编写你的第一个 PHP 程序:”Hello, World!”

按照惯例,我们的第一个程序将是输出 “Hello, World!”。

PHP 代码标记

PHP 代码需要放在特定的标记内,以便服务器区分 PHP 代码和普通 HTML 代码。最常见的标记是 <?php?>。所有 PHP 代码都必须写在这两个标记之间。

“`php

“`

echoprint 输出

在 PHP 中,我们使用 echoprint 语句来向浏览器输出内容。它们都是用于输出的语言结构,功能类似,但 echo 通常稍快一点,且没有返回值,而 print 有返回值 (总是 1)。

编辑 hello.php 文件,输入以下代码:

“`php




PHP Hello World

我的第一个 PHP 页面


“`

这段代码结合了 HTML 和 PHP。PHP 代码 <?php echo "Hello, World!"; ?> 嵌入在 HTML 中。当服务器处理这个文件时,它会执行 PHP 代码,将 "Hello, World!" 输出到 HTML 的相应位置。

运行 PHP 文件

保存 hello.php 文件。打开你的浏览器,在地址栏输入 http://localhost/hello.php

你应该会在浏览器中看到:

“`
我的第一个 PHP 页面

Hello, World!
“`

恭喜你!你已经成功运行了你的第一个 PHP 程序。

4. PHP 基础语法

语句结束符 (分号)

在 PHP 中,大多数语句都需要以分号 (;) 结束。这是一个非常重要的规则,忘记分号会导致解析错误。

“`php

“`

PHP 代码块的结束标记 ?> 前面的语句可以省略分号,但为了代码风格统一和避免潜在问题,推荐始终加上分号。

“`php

“`

注释

注释是代码中不会被执行的部分,用于解释代码的功能、目的或提供其他信息。PHP 支持三种注释方式:

  1. 单行注释: 使用 //#
    “`php
    <?php
    // 这是一个单行注释

    # 这也是一个单行注释
    echo "Hello";
    

    ?>
    2. **多行注释:** 使用 `/* ... */`php
    <?php
    /
    * 这是一个多行注释
    * 可以跨越多行来解释代码
    /
    echo “World”;
    ?>
    “`

注释是编写清晰易懂代码的好习惯。

对大小写敏感性

  • 变量名: PHP 中的变量名是区分大小写的。$name$Name 是不同的变量。
  • 函数名: 内置函数和用户自定义函数名是不区分大小写的。echo()ECHO() 是等效的。虽然不区分大小写,但通常推荐使用小写形式来保持一致性。
  • 关键词/结构: PHP 的关键词 (如 if, else, while, echo 等) 是不区分大小写的。IFif 是等效的。同样,推荐使用小写。

“`php

“;

echo strlen(“hello”); // 调用内置函数,不区分大小写
echo STRLEN(“world”); // 同样有效,但不推荐这样写
?>

“`

空白符

空格、制表符和换行符 (统称为空白符) 在 PHP 中大多会被忽略,用于提高代码的可读性。你可以在语句中随意使用空白符,但要确保不影响语法结构。

“`php

“`

5. 变量和数据类型

什么是变量?

变量是用于存储信息的容器。在 PHP 中,变量以 $ 符号开头,后面跟着变量名。变量名必须以字母或下划线开头,不能以数字开头,且只能包含字母、数字和下划线。变量名是区分大小写的。

声明和使用变量

PHP 是弱类型语言,这意味着你不需要在使用变量之前声明它的数据类型。变量的类型会根据赋给它的值自动确定 (或者在执行过程中动态改变)。

“`php

“`

PHP 的基本数据类型

PHP 支持以下基本数据类型:

标量类型 (Scalar Types): 包含单个值

  1. String (字符串): 用于存储文本,可以是单引号 (') 或双引号 (") 包围。

    • 单引号字符串是字面量,不会解析其中的变量或转义序列 (除了 \'\\)。
    • 双引号字符串会解析其中的变量 ($variable) 和多种转义序列 (如 \n 换行, \t 制表符, \" 双引号)。

    php
    <?php
    $name = "张三";
    echo '你好, $name'; // 输出: 你好, $name
    echo "你好, $name"; // 输出: 你好, 张三
    echo "这是一行\n新行"; // \n 在双引号中会被解析为换行
    ?>

  2. Integer (整型): 用于存储非小数的数字 (正数、负数或零)。
    php
    <?php
    $age = 30;
    $count = -5;
    ?>

  3. Float (浮点型/双精度型): 用于存储带有小数的数字。
    php
    <?php
    $pi = 3.14159;
    $temperature = -4.5;
    ?>

  4. Boolean (布尔型): 只有两个可能的值:truefalse (不区分大小写)。常用于条件判断。
    php
    <?php
    $is_admin = true;
    $is_logged_in = false;
    ?>

复合类型 (Compound Types): 可以存储多个值或更复杂的对象

  1. Array (数组): 用于存储有序集合的数据。数组是 PHP 中非常重要的数据结构,可以存储不同类型的值,通过数字索引或字符串键访问。
    php
    <?php
    $fruits = array("Apple", "Banana", "Cherry"); // 索引数组
    $person = array("name" => "李四", "age" => 25); // 关联数组
    ?>

  2. Object (对象): 用于存储类的实例。将在面向对象编程部分详细介绍。

特殊类型 (Special Types)

  1. NULL: 表示一个变量没有值。

    • 当变量被赋值为 NULL 时。
    • 当变量尚未被赋值时。
    • 当变量被 unset() 时。
      php
      <?php
      $variable = "Some value";
      $variable = null; // 现在 $variable 的值为 NULL
      unset($variable); // 现在 $variable 也不存在了,访问会报错或产生通知
      ?>
  2. Resource (资源): 表示外部资源 (如数据库连接、文件句柄等)。

类型转换 (Type Juggling)

PHP 的弱类型特性意味着变量的类型会根据上下文自动转换。这有时很方便,但也可能导致意外结果。

“`php

``
使用严格比较 (
===!==`) 是避免类型转换带来的潜在问题的推荐做法。

var_dump() 函数

var_dump() 是一个非常有用的调试函数,它可以显示变量的值以及数据类型。

“`php

输出示例:
string(6) “张三”
int(30)
float(9.99)
bool(true)
array(2) {
[0]=>
string(5) “Apple”
[1]=>
string(6) “Banana”
}
NULL
“`

6. 常量

常量是存储值的另一种方式,与变量不同,常量一旦定义,其值就不能被改变。常量在整个脚本的生命周期内都有效。

定义常量 (define())

使用 define() 函数来定义常量。
语法:define(name, value, case_insensitive)

  • name: 常量的名称 (字符串)。按照惯例,常量名通常全部大写。
  • value: 常量的值。
  • case_insensitive (可选): 布尔值,指定常量名是否大小写不敏感。默认是 false (大小写敏感)。在 PHP 7.3 之前,可以设置为 true 使其不敏感,但这个特性在 PHP 7.3 中被废弃,并在 PHP 8.0 中移除,所以现在常量名总是大小写敏感的。

“`php

``
常量不需要
$` 符号前缀。

预定义常量

PHP 提供了许多预定义常量,它们的值由 PHP 自身决定。例如:

  • __FILE__: 当前脚本的完整路径和文件名。
  • __LINE__: 文件中的当前行号。
  • PHP_VERSION: 当前 PHP 版本。
  • PHP_OS: 当前操作系统。

“`php

“;
echo “当前行号: ” . __LINE__;
echo “
“;
echo “PHP 版本: ” . PHP_VERSION;
echo “
“;
echo “操作系统: ” . PHP_OS;
?>

“`

7. 运算符

运算符用于对变量和值执行操作。

算术运算符

运算符 名称 示例 结果
+ 加法 $a + $b $a 和 $b 之和
- 减法 $a - $b $a 减去 $b
* 乘法 $a * $b $a 乘以 $b
/ 除法 $a / $b $a 除以 $b
% 取模 $a % $b $a 除以 $b 的余数
** $a ** $b $a 的 $b 次方

“`php

“`

赋值运算符

基本赋值运算符是 =。它将右边表达式的值赋给左边的变量。

还有复合赋值运算符:

运算符 示例 等同于
= $a = $b $a = $b
+= $a += $b $a = $a + $b
-= $a -= $b $a = $a - $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
**= $a **= $b $a = $a ** $b
.= $a .= $b $a = $a . $b

“`php

“`

比较运算符

用于比较两个值,返回布尔值 (truefalse)。

运算符 名称 示例 描述
== 等于 $a == $b 如果 $a 等于 $b,返回 true (值比较)
=== 全等 (恒等于) $a === $b 如果 $a 等于 $b 并且 类型相同,返回 true
!= 不等于 $a != $b 如果 $a 不等于 $b,返回 true
<> 不等于 (同 !=) $a <> $b 如果 $a 不等于 $b,返回 true
!== 不全等 (不恒等于) $a !== $b 如果 $a 不等于 $b 类型不同,返回 true
> 大于 $a > $b 如果 $a 大于 $b,返回 true
< 小于 $a < $b 如果 $a 小于 $b,返回 true
>= 大于等于 $a >= $b 如果 $a 大于或等于 $b,返回 true
<= 小于等于 $a <= $b 如果 $a 小于或等于 $b,返回 true
<=> 飞船运算符 (组合比较) $a <=> $b 返回 -1 (如果 $a < $b),0 (如果 $a == $b),或 1 (如果 $a > $b)

“`php

3); // true
var_dump(5 <= 5); // true var_dump(1 <=> 2); // -1
var_dump(2 <=> 2); // 0
var_dump(3 <=> 2); // 1
?>

``
强烈推荐在比较时使用
===!==`,以避免 PHP 的自动类型转换带来的混淆。

逻辑运算符

用于组合条件语句。

运算符 名称 示例 描述
&& 与 (AND) $a && $b 如果 $a 和 $b 都为 true,返回 true
and 与 (AND) $a and $b &&,但优先级较低
|| 或 (OR) $a || $b 如果 $a 或 $b 任意一个为 true,返回 true
or 或 (OR) $a or $b ||,但优先级较低
! 非 (NOT) !$a 如果 $a 为 false,返回 true
xor 异或 $a xor $b 如果 $a 和 $b 中只有一个为 true,返回 true

“`php

“`

字符串运算符

  • .: 连接运算符。用于将两个或多个字符串连接起来。
  • .=: 连接赋值运算符。将右边的字符串连接到左边变量的末尾。

“`php

“`

递增/递减运算符

用于增加或减少变量的值。

运算符 名称 示例 描述
++$a 前置递增 ++$a 先增加 $a,然后返回 $a
$a++ 后置递增 $a++ 先返回 $a,然后增加 $a
--$a 前置递减 --$a 先减少 $a,然后返回 $a
$a-- 后置递减 $a-- 先返回 $a,然后减少 $a

“`php

“`

8. 控制结构:条件判断

控制结构用于控制代码的执行流程。条件判断允许你根据条件的真假执行不同的代码块。

if 语句

如果指定的条件为真,则执行代码块。

“`php

“`

if...else 语句

如果条件为真,执行 if 块;否则,执行 else 块。

“`php

“`

if...elseif...else 语句

用于处理多个可能的条件。按顺序检查条件,执行第一个为真的条件块,如果所有条件都为假,则执行 else 块 (如果存在)。

“`php

“`

switch 语句

用于根据变量的不同可能值执行不同的代码块。通常用于替代多个 elseif 语句。

“`php

``break语句非常重要,它会跳出当前的switch块。如果省略break,代码会继续执行下一个case` 的代码 (称为“fall-through”)。

9. 控制结构:循环

循环用于重复执行一段代码,直到满足某个条件。

while 循环

只要条件为真,就重复执行代码块。

“`php

“;
$i++; // 别忘了更新条件,否则会死循环
}
?>

“`

do...while 循环

先执行一次代码块,然后检查条件。只要条件为真,就重复执行。do...while 循环至少会执行一次。

“`php

“;
$i++;
} while ($i <= 5); ?>

“`

for 循环

当你知道循环需要执行多少次时,通常使用 for 循环。

语法:for (初始化; 条件; 递增/递减) { 要执行的代码; }

“`php

“;
}
?>

“`

foreach 循环

专门用于遍历数组或对象。

语法:
* foreach ($array as $value) { ... }:遍历数组,每次迭代将当前元素的值赋给 $value
* foreach ($array as $key => $value) { ... }:遍历数组,每次迭代将当前元素的键赋给 $key,值赋给 $value

“`php

“;
}

$age = array(“Peter” => “35”, “Ben” => “37”, “Joe” => “43”);

foreach ($age as $name => $years) {
echo $name . ” 的年龄是 ” . $years . “。
“;
}
?>

“`

10. 函数

函数是一段封装了特定功能的代码块,可以重复使用。使用函数可以提高代码的组织性、可读性和可维护性。

什么是函数?为何使用函数?

  • 代码复用: 避免重复编写相同的代码。
  • 模块化: 将程序分解为更小、更易于管理的单元。
  • 提高可读性: 通过函数名清晰地表达代码的功能。
  • 易于维护: 修改一个功能只需要修改函数定义即可。

定义用户自定义函数

使用 function 关键词定义函数。

语法:
php
function functionName(参数1, 参数2, ...) {
// 要执行的代码
// 可选: return 返回值;
}

“`php

“`

调用函数

通过函数名后跟圆括号来调用函数。

“`php

“`

函数参数

函数可以接受参数,以便在执行时使用外部提供的值。

“`php

“`

可以为参数设置默认值:

“`php

“`

返回值 (return)

函数可以使用 return 语句返回值。当执行到 return 语句时,函数立即结束,并将指定的值返回给调用者。

“`php

``
函数没有
return语句或者只写return;会返回NULL`。

内置函数 (了解)

PHP 提供了数千个内置函数,覆盖各种常见任务。你已经接触了一些,如 echo(), strlen(), var_dump(), define() 等。学习查阅 PHP 官方手册 (https://www.php.net/manual/zh/) 是掌握这些函数的关键。

11. 数组 (Arrays)

数组是一种特殊类型的变量,它可以存储一个或多个值在一个变量中。每个值都有一个对应的键 (key)。

什么是数组?

可以将数组想象成一个列表或一个表格,其中每个项都有一个唯一的标识符 (键) 来访问它存储的值。

索引数组

键是数字,默认从 0 开始自动分配。

“`php

“`

关联数组

键是字符串。

“`php

“35”, “Ben” => “37”, “Joe” => “43”);

// 也可以单独赋值
$age[‘Peter’] = “35”;
$age[‘Ben’] = “37”;
$age[‘Joe’] = “43”;
?>

“`

访问数组元素

使用方括号 [] 和对应的键来访问数组元素。

“`php

“35”, “Ben” => “37”, “Joe” => “43”);
echo $age[‘Peter’]; // 输出: 35
echo $age[“Ben”]; // 输出: 37 (双引号也可以用于字符串键)
?>

“`

遍历数组 (foreach)

foreach 循环是遍历数组最常用的方法。

“`php

“;
}

$age = array(“Peter” => “35”, “Ben” => “37”, “Joe” => “43”);
foreach ($age as $name => $years) {
echo $name . ” 的年龄是 ” . $years . “。
“;
}
?>

“`

常用的数组函数

PHP 提供了许多用于操作数组的内置函数:

  • count(): 返回数组的元素个数。
  • sort(): 对索引数组按升序排序。
  • rsort(): 对索引数组按降序排序。
  • asort(): 对关联数组按值升序排序。
  • ksort(): 对关联数组按键升序排序。
  • arsort(): 对关联数组按值降序排序。
  • krsort(): 对关联数组按键降序排序。
  • print_r(): 打印关于变量的易于理解的信息 (常用于调试查看数组结构)。
  • var_dump(): 显示变量结构信息,包括类型和值 (比 print_r() 更详细,也常用于调试)。

“`php

Volvo
[1] => BMW
[2] => Toyota
)
*/

var_dump($cars);
/* 输出:
array(3) {
[0]=>
string(5) “Volvo”
[1]=>
string(3) “BMW”
[2]=>
string(6) “Toyota”
}
*/

sort($cars); // 对 $cars 进行排序
print_r($cars);
/* 输出:
Array
(
[0] => BMW
[1] => Toyota
[2] => Volvo
)
*/
?>

“`

12. 文件引入 (File Inclusion)

在大中型项目中,将代码分成多个文件是良好的实践。PHP 提供了在脚本中包含其他文件的方法。

主要有四个语句:include, require, include_once, require_once

  • include 'filename';include('filename');: 引入指定文件。如果文件不存在,会生成一个 E_WARNING 警告,但脚本会继续执行。
  • require 'filename';require('filename');: 引入指定文件。如果文件不存在,会生成一个 E_ERROR 致命错误,并停止脚本执行。
  • include_once 'filename';: 类似于 include,但确保文件只被引入一次。如果文件之前已经被引入过,则不再引入。
  • require_once 'filename';: 类似于 require,但确保文件只被引入一次。如果文件之前已经被引入过,则不再引入。

通常推荐使用 require_once,因为它不仅可以避免重复引入文件导致的函数重定义等问题,而且在被引入文件不存在时会中断执行,这对于依赖关系明确的程序更安全。

假设你有两个文件:
header.php:
“`php

网站头部

“;
?>

`footer.php`:php

网站底部

“;
?>

`index.php`:php




主页

这是主页内容。


``
访问
index.php时,服务器会先执行header.phpfooter.php中的 PHP 代码,然后将它们的输出包含到index.php` 的相应位置。

13. PHP 与 HTML 的交互

PHP 最强大的应用之一就是与 HTML 结合,动态生成网页内容,以及处理用户通过表单提交的数据。

在 HTML 中嵌入 PHP 代码

你已经在之前的例子中看到了这一点:将 <?php ... ?> 代码块直接放在 .php 文件中的 HTML 标记内。

“`html




嵌入 PHP

这是一个静态段落。

你好,” . $name . “!

“;
?>

这是另一个静态段落。


“`

处理表单数据 ($_GET, $_POST)

当用户通过 HTML 表单提交数据时,这些数据会被发送到服务器。PHP 提供了两个超全局数组 ($_GET$_POST) 来自动收集这些数据。

  • $_GET: 用于收集通过 URL 参数 (?key1=value1&key2=value2) 发送的数据。通常用于发送非敏感数据,或用于书签和共享链接。
  • $_POST: 用于收集通过 HTTP POST 请求发送的数据。通常用于发送表单数据,尤其当数据量较大或包含敏感信息时。

示例:一个简单的表单和处理脚本

form.html (或者直接写在一个 .php 文件中):
“`html




用户输入

姓名:
年龄:


“`

process.php:
“`php




处理结果

提交的数据

你好,” . htmlspecialchars($username) . “!

“; // 使用 htmlspecialchars 防止 XSS 攻击
echo “

你的年龄是:” . htmlspecialchars($age) . “。

“;
} else {
echo “

没有接收到数据。

“;
}
?>


``
用户在
form.html中填写信息并提交后,数据会被发送到process.phpprocess.php通过$_POST[‘username’]$_POST[‘age’]` 获取这些值,并在页面上显示。

注意使用 isset() 检查数组键是否存在,以及使用 htmlspecialchars() 对输出到 HTML 的用户输入进行转义,这是一个基本的安全措施,可以防止跨站脚本攻击 (XSS)。

如果表单的 method 改为 get,那么 process.php 就应该使用 $_GET 来获取数据:
php
// 在 process.php 中使用 $_GET 获取数据 (如果 method="get")
if (isset($_GET['username']) && isset($_GET['age'])) {
$username = $_GET['username'];
$age = $_GET['age'];
// ... 后续处理和输出
} else {
echo "<p>没有接收到数据 (GET 方法)。</p>";
}

14. 错误处理与调试基础

在开发过程中,你会遇到各种错误 (语法错误、运行时错误、逻辑错误)。了解如何查看和处理错误对于调试至关重要。

开启错误报告

在开发环境中,强烈建议开启 PHP 的错误报告,以便及时发现问题。

可以通过修改 php.ini 文件来设置错误报告级别和显示方式。在 XAMPP 中,可以在控制面板中点击 Apache 对应的 “Config” 按钮,选择 “PHP (php.ini)” 打开配置文件。

找到以下配置项:
* error_reporting: 设置错误报告级别。在开发阶段,可以设置为 E_ALL 显示所有错误、警告和通知。
* display_errors: 控制是否将错误信息直接输出到浏览器。开发阶段设置为 On。生产环境应该设置为 Off,并将错误记录到日志文件 (log_errors = On)。

示例配置 (开发环境):
ini
error_reporting = E_ALL
display_errors = On
log_errors = Off ; 开发环境不一定要写文件

修改 php.ini 后,需要重启 Apache 服务器才能生效。

使用 var_dump()print_r()

这两个函数是调试变量值和结构最常用的工具。它们能清晰地显示变量的类型、值,特别是对于数组和对象。

“`php

“张三”,
“age” => 30,
“courses” => [“PHP”, “SQL”]
);

echo “

"; // 使用 
 标签可以保持 var_dump/print_r 输出的格式
    var_dump($data);
    echo "

";

echo "

";
    print_r($data);
    echo "

";
?>

```

其他调试方法

  • die()exit(): 终止脚本执行,并可选地输出一条消息。常用于在代码执行到某个特定点时停止,检查变量状态。
    ```php
    <?php
    $step = 1;
    echo "执行到步骤 " . $step . "
    ";
    $step++;

    // 假设这里出了问题,我们想检查 $step 的值
    // die("脚本在步骤 " . $step . " 处停止。");
    
    echo "执行到步骤 " . $step . "<br>"; // 如果上面 die() 被执行,这行不会输出
    

    ?>
    ``
    * **查看服务器错误日志:** 当
    display_errors` 关闭时,错误会被写入日志文件。查看 Apache 的 error log 可以帮助你发现生产环境中的问题。
    * 使用集成开发环境 (IDE) 的调试器: 高级的 IDE (如 PhpStorm, VS Code 配合插件) 提供强大的调试功能,可以设置断点,单步执行代码,查看变量的实时状态。

结论

恭喜你!你已经学习了 PHP 的核心基础知识,包括环境搭建、基本语法、变量、数据类型、常量、运算符、控制结构 (条件判断和循环)、函数、数组以及与 HTML 的基本交互,并了解了基础的错误处理和调试方法。

这只是 PHP 世界的冰山一角。接下来你可以继续学习:

  • 更深入的 PHP 语法和概念: 面向对象编程 (OOP)、命名空间、异常处理、魔术方法等。
  • 文件操作: 读写文件。
  • 数据库操作: 使用 PHP 连接和操作 MySQL、PostgreSQL 等数据库。
  • 会话和 Cookie: 管理用户状态。
  • 安全性: 学习如何编写安全的 PHP 代码,防止常见的 Web 漏洞。
  • 框架: 学习 Laravel, Symfony, CodeIgniter 等 PHP 框架,它们能极大地提高开发效率和代码质量。
  • 包管理: 学习 Composer。

持续实践、多写代码、多查阅官方文档和社区资源,你将能够用 PHP 构建出强大而优秀的 Web 应用!祝你在 PHP 的学习旅程中取得成功!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部