PHP 基础教程:快速入门
PHP 是一种广泛使用的开源服务器端脚本语言,尤其适合 Web 开发,并且可以嵌入 HTML 中。它以其易学、高效和强大的特性,成为了构建动态网站和 Web 应用程序的主流技术之一。无论你是编程新手,还是希望扩展技能栈的开发者,学习 PHP 都是一个非常有价值的选择。
本教程将带你从零开始,快速掌握 PHP 的核心基础知识,包括环境搭建、基本语法、变量、数据类型、运算符、控制结构、函数、数组以及如何与 HTML 交互等。
目录
- PHP 是什么?为何选择 PHP?
- 什么是 PHP?
- PHP 的优势
- PHP 的应用场景
- 准备开发环境
- 理解服务器和客户端
- 选择开发环境集成包 (XAMPP, WAMP, MAMP)
- 安装并启动环境
- 创建你的第一个 PHP 文件
- 编写你的第一个 PHP 程序:”Hello, World!”
- PHP 代码标记
echo
和print
输出- 运行 PHP 文件
- PHP 基础语法
- 语句结束符 (分号)
- 注释
- 对大小写敏感性
- 空白符
- 变量和数据类型
- 什么是变量?
- 声明和使用变量
- PHP 的基本数据类型
- 标量类型 (Scalar Types)
- 复合类型 (Compound Types)
- 特殊类型 (Special Types)
- 类型转换 (Type Juggling)
var_dump()
函数
- 常量
- 定义常量 (
define()
) - 预定义常量
- 定义常量 (
- 运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 字符串运算符
- 递增/递减运算符
- 其他运算符 (了解)
- 控制结构:条件判断
if
语句if...else
语句if...elseif...else
语句switch
语句
- 控制结构:循环
while
循环do...while
循环for
循环foreach
循环 (用于遍历数组)
- 函数
- 什么是函数?为何使用函数?
- 定义用户自定义函数
- 调用函数
- 函数参数 (带默认值)
- 返回值 (
return
) - 内置函数 (了解)
- 数组 (Arrays)
- 什么是数组?
- 索引数组
- 关联数组
- 访问数组元素
- 遍历数组 (
foreach
) - 常用的数组函数
- 文件引入 (File Inclusion)
include
和require
include_once
和require_once
- PHP 与 HTML 的交互
- 在 HTML 中嵌入 PHP 代码
- 处理表单数据 (
$_GET
,$_POST
)
- 错误处理与调试基础
- 开启错误报告
- 使用
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 为例)
- 下载 XAMPP: 访问 Apache Friends 官网 (https://www.apachefriends.org/) 下载最新版本的 XAMPP。
- 安装: 运行下载的安装程序。安装过程通常比较简单,可以选择安装目录和组件 (默认即可)。在 Windows 上,安装时可能会提示关闭 UAC (用户账户控制) 或防火墙警告,根据提示操作即可。
- 启动控制面板: 安装完成后,找到 XAMPP Control Panel 并启动。
- 启动模块: 在控制面板中,你需要启动 Apache 和 MySQL 模块。点击对应的 “Start” 按钮。如果启动成功,模块名称会变成绿色,并显示进程 ID 和端口号 (Apache 通常是 80 或 443,MySQL 通常是 3306)。如果端口被占用,需要修改配置或停止占用该端口的程序。
- 测试: 打开你的浏览器,访问
http://localhost/
或http://127.0.0.1/
。如果看到 XAMPP 的欢迎页面,说明 Apache 服务器已成功启动。
创建你的第一个 PHP 文件
安装并启动服务器后,你需要知道在哪里放置你的 PHP 文件。在 XAMPP 中,这个目录通常是安装目录下的 htdocs
文件夹。对于 WAMP,通常是 www
文件夹;对于 MAMP,通常是 htdocs
或 www
文件夹 (可在 MAMP Preference 中配置)。
在 htdocs
文件夹内创建一个新的文本文件,命名为 hello.php
(文件名后缀必须是 .php
)。使用任何文本编辑器或代码编辑器 (如 VS Code, Sublime Text, Notepad++) 打开这个文件。
3. 编写你的第一个 PHP 程序:”Hello, World!”
按照惯例,我们的第一个程序将是输出 “Hello, World!”。
PHP 代码标记
PHP 代码需要放在特定的标记内,以便服务器区分 PHP 代码和普通 HTML 代码。最常见的标记是 <?php
和 ?>
。所有 PHP 代码都必须写在这两个标记之间。
“`php
“`
echo
和 print
输出
在 PHP 中,我们使用 echo
或 print
语句来向浏览器输出内容。它们都是用于输出的语言结构,功能类似,但 echo
通常稍快一点,且没有返回值,而 print
有返回值 (总是 1)。
编辑 hello.php
文件,输入以下代码:
“`php
我的第一个 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 支持三种注释方式:
- 单行注释: 使用
//
或#
“`php
<?php
// 这是一个单行注释# 这也是一个单行注释 echo "Hello";
?>
2. **多行注释:** 使用 `/* ... */`
php
<?php
/
* 这是一个多行注释
* 可以跨越多行来解释代码
/
echo “World”;
?>
“`
注释是编写清晰易懂代码的好习惯。
对大小写敏感性
- 变量名: PHP 中的变量名是区分大小写的。
$name
和$Name
是不同的变量。 - 函数名: 内置函数和用户自定义函数名是不区分大小写的。
echo()
和ECHO()
是等效的。虽然不区分大小写,但通常推荐使用小写形式来保持一致性。 - 关键词/结构: PHP 的关键词 (如
if
,else
,while
,echo
等) 是不区分大小写的。IF
和if
是等效的。同样,推荐使用小写。
“`php
“;
echo strlen(“hello”); // 调用内置函数,不区分大小写
echo STRLEN(“world”); // 同样有效,但不推荐这样写
?>
“`
空白符
空格、制表符和换行符 (统称为空白符) 在 PHP 中大多会被忽略,用于提高代码的可读性。你可以在语句中随意使用空白符,但要确保不影响语法结构。
“`php
“`
5. 变量和数据类型
什么是变量?
变量是用于存储信息的容器。在 PHP 中,变量以 $
符号开头,后面跟着变量名。变量名必须以字母或下划线开头,不能以数字开头,且只能包含字母、数字和下划线。变量名是区分大小写的。
声明和使用变量
PHP 是弱类型语言,这意味着你不需要在使用变量之前声明它的数据类型。变量的类型会根据赋给它的值自动确定 (或者在执行过程中动态改变)。
“`php
“`
PHP 的基本数据类型
PHP 支持以下基本数据类型:
标量类型 (Scalar Types): 包含单个值
-
String (字符串): 用于存储文本,可以是单引号 (
'
) 或双引号 ("
) 包围。- 单引号字符串是字面量,不会解析其中的变量或转义序列 (除了
\'
和\\
)。 - 双引号字符串会解析其中的变量 (
$variable
) 和多种转义序列 (如\n
换行,\t
制表符,\"
双引号)。
php
<?php
$name = "张三";
echo '你好, $name'; // 输出: 你好, $name
echo "你好, $name"; // 输出: 你好, 张三
echo "这是一行\n新行"; // \n 在双引号中会被解析为换行
?> - 单引号字符串是字面量,不会解析其中的变量或转义序列 (除了
-
Integer (整型): 用于存储非小数的数字 (正数、负数或零)。
php
<?php
$age = 30;
$count = -5;
?> -
Float (浮点型/双精度型): 用于存储带有小数的数字。
php
<?php
$pi = 3.14159;
$temperature = -4.5;
?> -
Boolean (布尔型): 只有两个可能的值:
true
或false
(不区分大小写)。常用于条件判断。
php
<?php
$is_admin = true;
$is_logged_in = false;
?>
复合类型 (Compound Types): 可以存储多个值或更复杂的对象
-
Array (数组): 用于存储有序集合的数据。数组是 PHP 中非常重要的数据结构,可以存储不同类型的值,通过数字索引或字符串键访问。
php
<?php
$fruits = array("Apple", "Banana", "Cherry"); // 索引数组
$person = array("name" => "李四", "age" => 25); // 关联数组
?> -
Object (对象): 用于存储类的实例。将在面向对象编程部分详细介绍。
特殊类型 (Special Types)
-
NULL: 表示一个变量没有值。
- 当变量被赋值为
NULL
时。 - 当变量尚未被赋值时。
- 当变量被
unset()
时。
php
<?php
$variable = "Some value";
$variable = null; // 现在 $variable 的值为 NULL
unset($variable); // 现在 $variable 也不存在了,访问会报错或产生通知
?>
- 当变量被赋值为
-
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
“`
比较运算符
用于比较两个值,返回布尔值 (true
或 false
)。
运算符 | 名称 | 示例 | 描述 |
---|---|---|---|
== |
等于 | $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.php和
footer.php中的 PHP 代码,然后将它们的输出包含到
index.php` 的相应位置。
13. PHP 与 HTML 的交互
PHP 最强大的应用之一就是与 HTML 结合,动态生成网页内容,以及处理用户通过表单提交的数据。
在 HTML 中嵌入 PHP 代码
你已经在之前的例子中看到了这一点:将 <?php ... ?>
代码块直接放在 .php
文件中的 HTML 标记内。
“`html
这是一个静态段落。
你好,” . $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.php。
process.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 的学习旅程中取得成功!