PHP程序设计
项目式|微课版
李文蕙刘嵩 / 主编江骏孙琳汪晓青/副主编罗保山/主审
PPP Programming
从基础到高级, 构建完整知识体系
案例丰富有趣,激发学生学习兴趣设置综合项目,帮助学生提升开发能力
PHP程序设计
项目式|微课版
李文蕙刘嵩/主编江骏孙琳汪晓青/副主编罗保山/主审
图书在版编目(CIP)数据
PHP程序设计:项目式:微课版/李文蕙,刘嵩主编.--北京:人民邮电出版社,2025.--(工业和信息化精品系列教材).--ISBN978-7-115-65979-8
I.TP312.8
中国国家版本馆CIP数据核字第2024VZ7499号
内容提要
本书系统地介绍了PHP程序设计的基础知识、核心概念、高级应用以及实际项目开发。本书共7个项目,包括PHP 概述、PHP语言基础、PHP目录与文件操作、PHP面向对象编程、PHP页面交互、PHP操作数据库、综合案例一中国文化墙的设计与实现等内容。本书结合我国文化元素和实际案例,通过项目实践的方式,强化内容的实用性和可操作性。这些案例不仅可以帮助读者巩固理论知识,还可以培养读者解决实际问题的能力。
本书既可作为高等职业院校相关专业PHP程序设计课程的教材,也适合作为PHP爱好者以及自学者的参考书。
主编 副主编 责任编辑 | 李文蕙刘嵩 江骏孙琳 王照玉 | 林汪晓青 |
责任印制 王郁焦志炜 人民邮电出版社出版发行 | 北京市丰台区成寿寺路11号 | |
邮编 100164 | 电子邮件315@ptpress.com.cn | |
网址 | https://www.ptpress.com.cn | |
天津千鹤文化传播有限公司印刷 | ||
开本:787×1092 | 1/16 | |
印张:14.25 | 2025年2月第1版 | |
字数:426千字 | 2025年2月天津第1次印刷 | |
前言
在这个信息技术迅猛发展的时代,互联网已经成为我们生活中不可或缺的一部分。而作为构建互联网世界的基石之一,PHP以卓越的性能、简洁的语法和强大的功能,成为众多开发者的首选语言。本书旨在为广大PHP学习者和爱好者提供一个全面、系统的学习平台,帮助大家掌握PHP编程的核心技能,进而在Web开发领域大展宏图。
在编写本书的过程中,编者充分考虑高职院校的特点和教学需求,力求将理论与实践相结合,使读者在学习的过程中既能理解PHP的原理,又能通过实际案例来巩固所学知识。本书从PHP的基础知识讲起,逐步深入到高级主题,如面向对象编程、操作数据库等,力求覆盖PHP 开发中的多个方面。本书的内容安排如下。
项目1介绍PHP运行环境搭建和PHP脚本的运行,帮助读者为后续的学习打下坚实的基础。
项目2讲解PHP 的基础知识、数据类型、变量与常量、运算符与流程控制语句、命名空间与文件引入、函数等,帮助读者构建扎实的编程基础。
项目3探讨PHP目录与文件操作,帮助读者进一步提升编程能力。
项目4介绍PHP面向对象编程,包括类与对象、面向对象的基本特性、面向对象的其他特性等,帮助读者掌握更高级的编程技巧。
项目5介绍PHP基本页面交互、会话机制等。
项目6讲解PHP操作数据库,包括使用mySqli扩展访问数据库与解析结果集、使用PDO扩展访问数据库、预处理语句等。
项目7提供一个综合案例一中国文化墙的设计与实现,通过项目实践帮助读者综合运用所学知识,提升实际开发能力。
本书在案例设计上融入文化元素,帮助读者在学习技术的同时增加对中华优秀传统文化的认识,提升民族自豪感和文化自信。
本书由李文蕙、刘嵩任主编,江骏、孙琳、汪晓青任副主编,杨瑾参与编写工作,罗保山任主审。在编写本书的过程中,编者得到了许多人的帮助和支持。在此,编者要特别感谢参与编写、审校和提供反馈建议的各位专家和同事,他们的宝贵建议使得本书更加完善和实用。
PHP程序设计(项目式)(微课版)
希望本书能够成为读者学习PHP的良师益友,帮助大家在Web开发的道路上不断进步。同时,编者期待读者提供宝贵意见和建议,以便改进和完善内容。让我们一起在PHP的世界里探索和成长,创造更加精彩的互联网未来。本书的相关电子资源可以通过人邮教育社区(www.ryjiaoyu.com)下载。
编者2024年11月
目录
项目1
PHP 概述
情境引入认识动态网页··
任务1.1PHP运行环境搭建
相关知识· 2
1.1.1PHP简介...
1.1.2PHP运行环境介绍· 3
1.1.3常见的PHP运行环境集成软件· 8
任务实践 8
1.1.4通过XAMPP搭建PHP运行环境 8
任务1.2运行PHP脚本.. 11
相关知识· · 11
1.2.1PHP常用开发工具· ... 11
1.2.2PHP脚本运行方式· .13
任务实践. .14
1.2.3编写并运行PHP脚本 14
项目实践文化墙项目虚拟主机配置 .15
项目小结 18
课后习题· 18
项目2
PHP语言基础 19
青境引入生成话剧介绍页面· .19
王务 2.1PHP 基础知识· 20
相关知识 . 20
2.1.1标记. · 20
2.1.2 注释…… ·20
2.1.3 标识符与关键字· ·21
2.1.4 变量的概念… 22
2.1.5语句与代码块 22
任务实践· ·24
2.1.6动态生成话剧介绍页面 ·24
相关知识· 30
2.2.1标量数据类型 .31
2.2.2复合数据类型 ·34
2.2.3 特殊数据类型 ·36
2.2.4 数据类型判断 .37
2.2.5数据类型转换 ..·39
任务实践· 41
2.2.6使用数组存放多部话剧的介绍信息 · 41
任务2.3认识变量与常量 13
相关知识 ·43
2.3.1变量的赋值. 43
2.3.2 可变变量… 44
2.3.3 预定义变量· .45
2.3.4 常量简介…… .46
2.3.5预定义常量与魔术常量 47
任务实践. .49
2.3.6使用常量存放话剧网页相关信息 49
相关知识· .51
2.4.1算术运算符 51
2.4.2 字符串连接运算符· ·52
2.4.3 赋值运算符… ·52
2.4.4 位运算符 54
2.4.5 自增运算符和自减运算符 ·55
2.4.6 逻辑运算符 ·56
2.4.7 比较运算符· 57
2.4.8 其他运算符· .58
2.4.9 运算符优先级… ·59
2.4.10 使用条件语句· ..60
2.4.11 使用循环语句 ..63
2.4.12 使用跳转语句 66
任务实践 ·67
2.4.13使用流程控制的替代语法输出话剧信息 ·67
任务2.5认识命名空间与文件引引入
相关知识·
2.5.1命名空间· 72
2.5.2文件引入· 72
任务实践…. 73
2.5.3使用命名空间和文件引I入管理同名的诗词· 73
任务2.6认识函数 75
相关知识· 75
2.6.1定义函数…. .75
2.6.2 函数的参数· 76
2.6.3 变量的作用域· ...79
2.6.4 可变函数…. .81
2.6.5 匿名函数…. .82
2.6.6 字符串操作函数· .83
2.6.7 数学操作函数 .86
2.6.8 日期和时间操作函数 ...87
2.6.9数组操作函数 ·90
任务实践· ·92
2.6.10使用自定义函数实现对诗词目录的操作 ·92
课后习题· 96
项目3
PHP目录与文件操作 97
境引入使用文件操作功能保存中国古代诗词 97
务3.1目录操作. ·98
相关知识…. ..98
3.1.1打开与关闭目录…. .98
3.1.2创建和删除目录· 98
3.1.3浏览目录…. 99
3.1.4其他目录相关函数· ·100
任务实践· .·101
3.1.5创建诗人目录· 101
相关知识· ·103
3.2.1文件打开与关闭· ...103
3.2.2文件读取… .. 103
3.2.3文件写入… ·105
3.2.4其他文件相关函数· .107
任务实践… .108
3.2.5将诗词保存到独立文件 .108
项目实践保存页面访问统计日志 .110
项目小结· .111
课后习题 . 112
项目4
PHP面向对象编程 113
情境引I入使用类和对象描述中国戏曲· 113
4.1.1面向对象编程的概念 . 114
4.1.2定义类与创建对象. .115
4.1.3构造方法与析构方法 117
4.1.4 伪变量$this ……. ..118
4.1.5static关键字和“:"”操作符 · 120
任务实践· . 121
4.1.6定义戏曲类并创建对象 121
任务4.2面向对象的基本特性 123
相关知识 ·123
4.2.1封装 .123
4.2.2继承 .125
4.2.3多态·. 126
任务实践· 128
4.2.4使用面向对象的特性重构戏曲类 128
任务4.3面向对象的其他特性 130
相关知识…· .130
4.3.1抽象类·. . 130
4.3.2接口…. .131
4.3.3魔术方法 ·133
4.3.4异常· .·136
任务实践· .138
4.3.5利用面向对象特性实现节目播报程序.· .·138
项目实践使用单例模式· 140
课后习题· 42

项目5
PHP页面交互 143
相关知识 144
5.1.1获取请求数据· : 144
5.1.2页面跳转…. .146
5.1.3文件上传· .148
任务实践 .150
5.1.4多文件上传 . 150
任务5.2会话机制· 152
相关知识·. .152
5.2.1Cookie.. ·152
5.2.2Session· ·153
任务实践·. 154
5.2.3使用Session 控制页面访问 154
项目小结· 162
项目6
PHP操作数据库 : 163
境引入记录历史悠久的中华文明· ...163
务6.1使用mysqli扩展访问数据库与解析结果集 .164
相关知识· .164
6.1.1配置mysqli. · 164
6.1.2mysqli扩展常用 API ... ..164
6.1.3操作数据库步骤. ·165
任务实践· .166
6.1.4面向过程风格操作数据库· ·166
6.1.5面向对象风格操作数据库· . 169
6.1.6使用mysqli扩展解析结果集· . 173
相关知识 . 177
6.2.1配置PDO ·177
6.2.2PDO扩展常用API. . 178
PHP程序设计(项目式)(微课版)
任务实践… ..· 179
6.2.3使用PDO扩展操作数据库· · 179
6.2.4使用PDO扩展解析结果集· .· 181
任务6.3预处理语句· 183
6.3.1预处理语句简介· ·183
任务实践… ..·183
6.3.2在mysqli扩展中使用预处理语句 .183
6.3.3在PDO扩展中使用预处理语句 ..187
项目实践使用PHP备份数据库· 190
项目小结· 192
课后习题· 193
项目7
综合案例——中国文化墙的设计与实现 .194
任务7.2权限功能实现 200
任务实践 · 201
7.2.1登录功能实现 . 201
7.2.2退出功能实现 203
7.2.3登录拦截功能实现· .203
任务7.3业务功能实现 204
任务实践…… 204
7.3.1浏览功能实现 ·204
7.3.2 添加功能实现· .206
7.3.3 删除功能实现… .209
7.3.4编辑功能实现…· .209
项目实践使用分页完善浏览功能 ·212
项目小结· 217
课后习题· 217
项目1PHP概述
【知识目标】
)理解静态网页和动态网页两种技术的区别。
·理解PHP运行环境构成。
·理解PHP运行原理。理解URL的组成。
【能力目标】
·能够手动搭建WAMP运行环境。
·能够使用XAMPP搭建运行环境。
·能够使用Visual Studio Code编写并运行PHP脚本。
·能够配置虚拟主机。
【素质目标】
·培养软件版权意识,尊重知识产权。
·培养团队合作意识,提升沟通能力。
情境引入 认识动态网页
静态网页的起源可以追溯到互联网的早期阶段,静态网页不需要服务器端脚本语言支持,不涉及数据库等复杂技术的运用。这些页面主要使用超文本标记语言(Hypertext Markup Language,HTML)和串联样式表(Cascading Style Sheet,CSS)语言编写,只包含简单的文本和图片,无法实现复杂的交互和动态内容更新。
随着互联网的迅猛发展,静态网页逐渐无法满足用户的交互需求。21世纪初,动态网页技术开始流行。动态网页最初采用公共网关接口(Common Gateway Interface,CGI)技术,可以通过调用执行程序生成动态内容,后来发展出活动服务器页面(Active ServerPages,ASP)、Java服务器页面(Java Server Pages,JSP)、页面超文本预处理器(Page Hypertext Preprocessor,PHP)等服务器端脚本语言。动态网页通常会在服务器端访问数据库来进行动态数据的增、删、改、查操作。
根据2023年9月W3Techs关于服务器端脚本语言占有率的调查数据,全世界范围内有接近 76.9%
PHP程序设计(项目式)(微课版)
的动态网站在使用PHP语言,如图1-1所示。

静态网页和动态网页在请求执行时有显著的区别。
当用户请求静态网页时,通常响应速度非常快。服务器在接收到请求后,只需查找和发送相应的静态HTML文件,不需要执行复杂的服务器端逻辑或与数据库进行交互。相应的HTML文件在服务器端和用户端之间没有任何变化,它是静态的,不依赖于用户的请求。
当用户请求动态网页时,服务器在接收到请求后,需要执行服务器端程序,这些程序可能会涉及数据库查询、数据处理、业务逻辑等操作。服务器动态生成HTML响应,然后将其发送给用户。
任务1.1PHP运行环境搭建
相关知识
1.1.1PHP简介
PHP原指Personal Home Page,意思是每个人都可以用它来轻松编写个人主页,形容 PHP功能强大、语法简单、容易学习。后来,PHP 指Page Hypertext Preprocessor,是一种被广泛使用的服务器端脚本语言,具有以下特点。
PHP是一种开源语言,使用PHP开发商业项目无须付费。
PHP是一种跨平台语言,在不同平台下安装各自对应的PHP解析器程序,PHP代码可以在不同平台运行。
PHP是一种解析型语言,执行PHP代码前不需要进行编译。
PHP是一种脚本语言,可以被嵌入HTML页面,非常适合用来开发动态页面。
PHP是一种运行在服务器端的语言,PHP代码执行后向客户端返回HTML代码,客户端无法知道PHP源代码是什么。
PHP是一种强大的CGI脚本语言,其网页执行速度比ASP、JSP等更快,占用的系统资源更少。
PHP是一种面向对象的语言,具有面向对象的特性。
对于开源软件,其源代码是公开的,任何人都可以查看、使用、修改和分发。开源软件通常使用开
源许可证来规定其使用条件,这些开源许可证确保了开源软件的自由性和共享性,允许其他人使用和修改软件。对于非开源软件,其源代码通常是私有的,只有软件的开发者或拥有者可以查看和修改。总的来说,开源软件鼓励共享和合作,而非开源软件更加注重知识产权的保护和商业利益的追求。
1.1.2PHP运行环境介绍
Apache ^+ MySQL ^+ PHP是一种常用的Web开发环境组合(简称AMP环境,如果用NGINX替换 Apache,就称为 NMP 环境),适用于开发和测试 PHP 应用程序。以下是 AMP 环境的主要组件和功能。
Apache是一种流行的开源Web服务器,用于处理超文本传送协议(HypertextTransferProtocol,HTTP)请求和响应。它在本地运行Web服务器,用来监听来自客户端的Web请求,并返回结果。
MySQL是一种流行的关系数据库管理系统,用于存储和检索数据。在AMP环境中,MySQL用于创建和管理数据库,以便PHP应用程序与数据库进行交互。
PHP能够与Apache和MySQL集成,从数据库中检索数据并将其呈现为Web页面。
通常,WindowS操作系统下的PHP运行环境称为WAMP环境。下面是WAMP环境的安装与配置过程。
1.Apache 安装
(1)下载Apache。
可以在Apache官网下载最新版本的Apache,下载时注意选择适合自己操作系统的压缩包。
(2)解压缩、安装。
将下载的Apache 压缩包解压缩到一个目录,如C:/mywamp/Apache24。解压缩出来的Apache目录结构如图1-2 所示。其中,bin子目录下存放可执行文件,conf子目录下存放Apache 的配置文件,htdocs子目录是默认的网站文档根目录。
此电脑)本地磁盘(C:)>mywamp>Apache24> C | |
bin | |
conf | cgi-bin |
error | |
htdocs | icons |
include | lib |
logs | manual |
modules | ABOUT_APACHE |
CHANGES | INSTALL |
LICENSE | NOTICE |
OPENSSL-NEWS | OPENSSL-README |
README |
(3)配置Apache。
Apache的配置文件是httpd.conf,在conf子目录下。打开文件,找到DefineSRVROOT这一行,该行用于定义变量SRVROOT,在当前文件中多处通过${SRVROOT}对变量SRVROOT进行访问,将值修改为实际的解压缩路径,例如 C:/mywamp/Apache24,如图1-3所示。

(4)启动Apache。
切换目录到Apache的bin目录,以管理员身份执行ApacheMonitor.exe,在Windows系统托盘中会出现一个小图标。单击ApacheMonitor图标,可以选择Start(启动)、Stop(停止)或Restart(重新启动)Apache服务器,如图1-4所示。ApacheMonitor中如果没有可用服务,则可以通过命令行工具在bin目录下运行.httpd -\mathsf{k} install -\boldsymbol{\mathsf n} Apache2.4命令进行安装。

启动Apache 服务器后,在浏览器地址栏输入http://127.0.0.1并按 Enter 键,如果出现Apache测试页面,则表示安装成功,如图1-5所示。

2.PHP 安装
(1)下载PHP。
访问PHP官方网站,选择需要的PHP版本。通常, x64 版本适用于64位Windows操作系统、x86 版本适用于32位Windows操作系统,可根据自己的操作系统选择合适的版本。
(2)解压缩、安装。
将下载的PHP 压缩包解压缩到一个目录,如C:/mywamp/php。解压缩出来的PHP目录结构如图 1-6 所示。其中,php7apache2_4.dll用于将 PHP 集成到 Apache 上,它允许 Apache 和 PHP进行通信和协作,以便在Apache服务器上运行PHP脚本。
此电脑>本地磁盘(C:)>mywamp>php> | C Q 搜索"php" | |
dev | ext | extras |
lib | sasl2 | deplister |
glib-2.dll | gmodule-2.dll | icudt66.dll |
icuin66.dll | icuio66.dll | icuuc66.dll |
libcrypto-1_1-x64.dll | libenchant.dll | libpq.dlll |
libsasl.dll | libsodium.dll | libsqlite3.dll |
libssh2.dll | libssl-1_1-x64.dll | license |
news | nghttp2.dll | phar.phar |
pharcommand.phar | phpphp | php |
php.ini-development | php.ini-production | php7apache2_4.dll |
php7embed.lib | php7phpdbg.dll | php7ts.dll |
pphp-cgi | php phpdbg | php php-win |
README | readme-redist-bins | snapshot |
(3)配置PHP。
找到 php.ini-development 文件,将其另存为 php.ini。打开文件,找到 extension_dir 配置项,该配置项用于指定PHP扩展库的目录,将值修改为PHP目录结构下的 {ext} 子目录,如 C:/mywamp/php/ext,注意删除对应行开头的分号,如图1-7所示。

图1-7PHP扩展库目录配置
php.ini是PHP的配置文件,以下是一些常用的配置选项:date.timezone,用于设置时区;error_reporting,用于设置错误报告级别;display_errors,用于控制是否在浏览器中显示PHP错误;upload_max_flesize,用于设置文件上传最大的大小。
(4)配置Apache。
在 Apache 的配置文件中,需要添加一些指令来加载 PHP 模块,以使 Apache 能够处理 PHP 类型的文件请求。在Apache 的 httpd.conf配置文件中加入下面的内容,修改完成后需要重新启动Apache服务器使配置生效。
LoadModule php7_module "C:/path/to/php7apache2_4.dl1" AddHandler application/x-httpd-php .php PHPIniDir "C: /mywamp/php/php.ini"
LoadModule指令用于加载PHP模块,AddHandler指令用于关联扩展名为.php的文件与PHP解析器,PHPIniDir指令用于指定PHP配置文件的位置。
3. MySQL 安装
(1)下载MySQL。
访问 MySQL官网,下载合适版本的MySQL。需要注意,MySQL下载文件分为安装版和压缩版,
PHP程序设计(项目式)(微课版
不同版本的MySQL的安装和配置过程会有所不同。这里以MySQL5.5压缩版为例进行讲解,其他版本的安装请阅读相关的MySQL资料。
(2)解压缩、安装。
将下载的MySQL压缩包解压缩到一个目录,如C:/mywamp/mysql。解压缩出来的MySQL目录结构如图1-8所示。bin子目录下存放着可执行文件,其中,mysql.exe是一个用于与MySQL服务器进行交互的客户端命令行工具;mysqld.exe是MySQL服务器的主要执行文件,负责管理和提供数据库服务。

(3)配置MySQL。
MySQL的安装目录下有几个名字类似的my-Xxx.ini文件,这几个文件是MySQL针对不同规模应用的配置信息,这些配置只有放到 my.ini中才会被应用。这里将 my-medium.ini文件另存为 my.ini。
MySQL服务的默认监听端口是3306,如果当前计算机上有别的程序或者其他版本的MySQL占用了3306端口,则可以通过修改my.ini中的port 配置项来改变当前MySQL的监听端口,MySQL 端口配置如图1-9所示。需要注意,[client]后的port是mysql .\ominusx\ominus 命令连接数据库的端口,[mysqld]后的port是mysqld.exe命令(即数据库服务)的监听端口。

(4)运行MySQL。
以管理员身份运行命令行工具,执行以下命令。
cd C:\mywamp\mysql\bin mysqld -install mysql
在上述命令中,mysqld 命令的-install 参数表示将 MySQL 安装成系统服务,后面的 mysql 是系统服务的名字,如果该服务名已存在则可以自行修改。
服务安装成功后可以通过下面的命令启动或者停止名为mysql的服务。
net start mysql net stop mysql
正确启动MySQL服务后,本机就是一台MySQL服务器,可以测试数据库运行状态。以管理员身份运行命令行工具,切换到C:/mywamp/mysql/bin目录,然后执行下面的命令。
mysql -u root
上述命令表示以root账号连接MySQL数据库,由于没有配置密码,因此命令使用空密码进行连接,连接成功后可以看到MySQL数据库信息,如图1-10所示。

将MySQL安装成系统服务后,如果需要卸载,则以管理员身份运行命令行工具。切换到C:/mywamp/mysql/bin目录,使用下面的命令卸载名为mysql的服务。
net stop mysql mysqld -remove mysql
在上述命令中,net stop命令表示停止系统服务,后面的 mysql是系统服务的名字。mysqld命令的-remove参数表示卸载 MySQL系统服务,后面的mysql是系统服务的名字,卸载名为 mysql 的MySQL系统服务如图1-11所示。这两个命令后面的系统服务名需要和安装MySQL系统服务时提供的系统服务名相同。

1.1.3常见的PHP运行环境集成软件
PHP作为服务器端脚本程序运行时,一般需要安装Apache服务器程序、MySQL数据库程序和PHP解析器程序。这些程序需要分别下载、安装并进行相关配置才能正常使用,过程相当烦琐。目前市面上有很多PHP运行环境集成软件,它们将上述程序打包整合在一起。使用这些集成软件,可以降低入门学习的难度。
PHP运行环境集成软件的主要作用是提供一个方便的方式来一次性安装PHP环境以及相关的组件和扩展。使用集成软件可以避免手动配置参数、设置路径等烦琐的工作。大多数集成软件安装包都有图形或命令行的安装程序,可以自动配置好环境,使用起来非常方便。下面介绍几种常用的PHP运行环境集成软件。
1. XAMPP
XAMPP是一款免费的、易于安装的集成软件,包含MariaDB(由开源社区维护的MySQL开源分支)、PHP和Perl,可帮助开发人员设置具有所有必要工具的本地服务器以进行Web开发。
2. PHPStudy
PHPStudy 集安全、高效、功能性于一体,运维效率高,支持一键安装LAMP(Linux ^+ Apache+MySQL ^{.+} PHP)、LNMP (Linux+NGINX ^+ MySQL+PHP)、集群、监控网站、文件传输协议(FileTransferProtocol,FTP)服务、数据库服务、Java 环境等100多项服务器管理功能。
3.宝塔面板
宝塔面板是一款服务器管理软件,支持Windows和Linux操作系统,它拥有可视化文件管理器、可视化软件管理器、可视化监控图表、计划任务等功能,可以通过Web端轻松管理服务器,提升运维效率。
4. PHPEnv
PHPEnv 是运行在Windows 操作系统上的 PHP 集成环境,集成了Apache、NGINX等Web 组件,内置 Redis、Composer 等常用软件,支持不同 PHP 版本共存,支持自定义 PHP 版本、自定义MySQL版本等实用功能。
上述4款集成软件各有特点,初学者掌握XAMPP即可,在理解Web 服务器、MySQL服务器、虚拟主机等概念以及相关配置后可以尝试使用其他软件。
任务实践
1.1.4通过XAMPP搭建PHP运行环境
1.下载和安装XAMPP
访问XAMPP官方网站,下载适用于WindowS的XAMPP安装程序。运行XAMPP安装程序,Windows操作系统如果开启了用户账户控制(User Account Control,UAC),则会弹出UAC 警告,如图1-12 所示。

使用默认设置进行安装,XAMPP将被安装到C:/xampp目录下。如果在运行XAMPP安装文件时弹出 UAC警告,那么安装后需要设置XAMPP安装程序的运行权限。找到 C:/xampp/xampp-control.exe,右击该文件,在弹出的菜单中选择“属性”,在打开的“xampp-control.exe 属性”对话框中,勾选“以管理员身份运行此程序”复选框并单击“确定”按钮,如图1-13所示。

2.启动XAMPP
安装完成后,可以在“开始”菜单中通过选择XAMPP目录下的xampp-control快捷方式,或者通过运行安装目录下的xampp-control.exe 来启动XAMPP控制面板,XAMPP 控制面板如图1-14所示。

单击XAMPP控制面板右侧的“Explorer”按钮,会打开XAMPP的安装目录,其目录结构如图1-15所示,其中,htdocS子目录是XAMPP集成环境下网站文档的根目录。

3.启动Apache 和 MySQL
在XAMPP 控制面板中找到Apache 和MySQL,并分别单击它们的“Start”按钮以启动这两个服务。如果成功启动,则相应的模块会显示绿色的运行指示灯,并且Port(s)下面会出现对应的端口号,如图1-16所示。

如果启动失败,一般可能的原因是其他程序占用了相关端口,如之前安装过其他的MySQL占用了3306端口、有其他的软件占用了80或443端口。解决方案就是找到冲突软件,停止它们的后台服务,再启动XAMPP 中的Apache、MySQL,或者修改XAMPP 中Apache、MySQL 的监听端口再启动。如果采用修改监听端口的方式,则需要在使用相关服务的时候加上修改后的端口号。
4.测试运行
单击Apache对应的“Admin”按钮,浏览器会打开×AMPP的欢迎页面,如图1-17所示。测试成功后,建议删除htdocs目录里面所有的内容,只保留空的htdocs目录备用。

单击MySQL对应的“Admin”按钮,浏览器会打开phpMyAdmin 的首页,如图1-18所示。phpMyAdmin是一个用于管理MySQL数据库的开源Web应用程序。它提供了一个基于Web的图形用户界面,允许用户执行各种数据库管理任务,如操作数据库、数据表和字段,执行SQL(StructureQueryLanguage,结构查询语言)查询,导入和导出数据,以及管理数据库用户权限等。

任务1.2运行PHP脚本
相关知识
1.2.1PHP常用开发工具
PHP作为一门广泛使用的服务器端脚本语言,拥有众多专为开发者设计的开发工具,以提升代码编写、调试、测试、部署和项目管理的效率。以下是一些常用的PHP开发工具。
PHPStorm:由JetBrains公司开发的专业PHP开发工具,提供智能代码补全、语法高亮、代码导航、重构、调试、版本控制集成、单元测试、数据库管理、远程部署等功能,深受广大PHP开发者
PHP程序设计(项目式)(微课版)
喜爱。
HBuilderX:由DCloud公司开发的一款轻量级但功能强大的开发工具,它支持HTML、CSS、JavaScript等前端技术,并且集成了多种开发环境和工具,可以通过插件市场安装PHP语法提示插件以支持PHP开发。
Visual StudioCode:一个免费、开源的代码编辑器,适用于多种编程语言和开发环境,它的强大的扩展生态系统和活跃的社区使得它成为许多开发者的首选工具之一。本书以Visual StudioCode为例讲解PHP的开发。
1. 安装Visual Studio Code
访问VisualStudioCode的官方网站,下载安装程序。双击安装程序启动安装向导,按照安装向导的提示选择安装位置和设置其他选项。安装向导运行到“选择附加任务”界面时,建议勾选全部选项,如图 1-19 所示。


2.安装扩展
启动Visual Studio Code,单击左侧导航栏中的“Extensions”按钮,在搜索框中输入“PHP”,在下面的扩展列表中找到“PHP Intelephense”扩展,单击对应的“Install”按钮完成扩展安装,如图1-20所示。

1.2.2PHP脚本运行方式
PHP脚本能以多种方式运行,以下是几种常见的PHP脚本运行方式。
1.命令行
在命令行中运行独立的PHP脚本,适用于定期任务和脚本测试。
2. CGI
通过CGI运行PHP脚本,用于与Web服务器通信,性能相对较低,不常用。
3.Web服务器模块
PHP作为Web服务器的模块运行,与Web服务器进程绑定在一起。这种方式简单,但可能影响服务器性能和稳定性,适用于简单的Web应用程序和小型网站,不需要大量并发处理。
4. PHP-FPM
PHP-FPM(PHP-FastCGI ProceSS Manager,PHP-FastCGI进程管理器)是一种独立的进程管理器,用于处理PHP请求,适用于需要高性能、高并发处理和高稳定性的大型Web应用程序。
在Web服务器上运行PHP脚本,服务器会生成HTML内容,然后将响应发送给用户浏览器,最终由浏览器渲染和呈现给用户。这种方式允许开发者创建动态的、交互性强的Web应用程序。PHP运行流程如图1-21所示。

1.客户端请求
整个过程始于用户在浏览器中输入统一资源定位符(Uniform Resource Locator,URL)单击超链接或者提交表单,向Web服务器发起HTTP请求。
2.Web服务器处理
Web服务器(如 Apache、NGINX等)收到HTTP请求后,会根据请求的URL和其他信息来确定如何处理请求。如果请求的URL对应的文件是一个PHP文件(通常以扩展名.php结尾),服务器会将请求的PHP文件交给PHP解析器。
3.PHP代码执行
PHP解析器逐行解析和执行PHP代码。在执行过程中,它可以执行各种任务,包括数据库查询、文件操作、数据处理等,最后生成对应的HTML内容,并将其发送到Web服务器。
4.Web服务器响应HTML
PHP脚本生成的HTML内容会返回Web服务器,这些内容包括页面的结构、文本、图像等。Web服务器收到PHP生成的HTML内容后,会将其打包成HTTP响应,并返回给用户浏览器。
5.浏览器渲染
用户浏览器收到HTTP响应后,会解析HTML内容并在用户浏览器上渲染页面。
任务实践
1.2.3编写并运行PHP脚本
通过文件资源管理器找到服务器文档根目录htdocs,右击htdocs目录,在弹出的菜单中选择“通过Code打开”命令,如图1-22所示。

Visual StudioCode启动后,其主界面左侧的EXPLORER(资源管理器)中会显示HTDOCS,表示当前打开的目录。目录名的旁边依次是“NewFile”(创建文件)、“NewFolder”(创建目录)“Refresh Explorer”(刷新资源管理器)和“CollapseFolders In Explorer”(在资源管理器中折叠目录)按钮,如图1-23所示。

单击“NewFile”(创建文件)按钮,在输入框中输入文件名test.php,按Enter键后,HTDOCS下生成test.php文件。在test.php 文件中加入代码<?phpphpinfo(); ?> ,保存文件,如图1-24所示。

启动Apache服务器后,在浏览器中通过http://127.0.0.1/test.php访问该文件。如果PHP脚本正确运行,则可以看到运行结果,其中包括当前服务器的设置、操作系统版本、PHP版本等信息,如图1-25所示。

在浏览器中输入的http://127.0.0.1/test.php称为统一资源定位符,用于标识和定位网络上的资源。它包括描述资源位置的信息,如协议、主机名、端口号、路径等,结构如下。
协议://主机名或者主机IP地址:端口/资源路径
如果通过协议的默认端口进行访问,则可以省略其中的“:端口”。常见的协议默认端口有FTP的21、HTTP 的 80、HTTPS 的 443 和 MySQL 协议的 3306,所以 http://127.0.0.1/test.php 表示通过HTTP的默认端口80请求位于本机Web服务器文档根目录htdocs下的test.php文件。
项目实践文化墙项目虚拟主机配置
当使用本地主机默认域名localhost访问Apache服务器时,服务器会访问默认的网站文档根目录,即htdocS。在实际开发中,可能会在同一台服务器上部署多个Web应用程序。如果希望通过不同的域名访问不同的应用程序文档根目录,就需要对服务器进行虚拟主机配置。虚拟主机允许在同一台服务器上托管多个域名或网站。
【实践目的】
掌握hosts 域名解析配置,掌握Apache 服务器虚拟主机配置,掌握Apache服务器目录访问权限配置。
【实践过程】
1.修改 hosts
在WindowS上进行本地域名解析可以将自定义域名映射到特定的IP地址,以便本地系统直接解析这些域名,而不需要通过公共域名系统(DomainName System,DNS)服务器。
以管理员身份通过Visual Studio Code打开C:/Mindows/System32/drivers/etc下的hosts 文件,在hosts文件的末尾添加要进行本地解析的域名和对应的IP地址,格式如下。
127.0.0.1 www.culture.local
保存文件后,打开命令行工具,执行下面的命令刷新DNS缓存,使配置立即生效。
ipconfig/flushdns
在命令行工具中执行下面的命令,如果显示“来自127.0.0.1的回复”,则表示本地域名解析配置成功,如图1-26所示。
ping www.culture.local

2.创建文化墙项目
选择一个目录作为项目的文档根目录,这里在C:Vebapps 下新建目录 culture,作为项目的文档根目录。在culture目录下新建index.php,其中的代码如下。
<?php
echo"文化墙项目首页"
?>
在PHP中,echo是一个用于输出数据到浏览器的语言结构。它通常用于将字符串、变量直接显示在网页上。echo是一个语言结构,而不是一个函数,这意味着它不需要像函数那样使用括号。
3.配置虚拟主机
前面的操作设置了本地域名www.culture.local,创建了项目文档根目录culture,现在需要让Apache服务器对域名和项目文档根目录建立关联,即将来自对www.culture.local域名的请求转到Culture目录。
在Apache 配置文件htpd.conf 中可以找到下面的代码。
Include conf/extra/httpd-vhosts.conf
Include命令表示将外部配置文件导入当前配置文件,后面跟的是虚拟主机配置文件的路径。打开httpd-vhosts.conf文件,在文件末尾添加下面的代码。
<VirtualHost \*:80> DocumentRoot "C:/xampp/htdocs" ServerName localhost
</VirtualHost>
<VirtualHost \*: 80greater DocumentRoot "C:/Webapps/culture" ServerName www.culture.local
</VirtualHost>
<VirtualHost>标签用于定义虚拟主机,\*:80表示来自任何IP地址的请求都会匹配该虚拟主机配置。这意味着无论请求来自哪个IP地址,只要它们使用的是服务器的80端口,都会被路由到该虚拟主机进行处理。
DocumentRoot指定了虚拟主机的文档根目录,即网站文件的存放位置。
ServerName指定了虚拟主机的域名或主机名。当服务器收到来自该域名的请求时,它将使用相应的虚拟主机配置进行处理。
上面的代码表示来自localhost 域名的请求将被转到C:/xampp/htdocs目录,来自www.culture.local域名的请求将转到culture目录。
保存配置后重启Apache服务器,通过浏览器打开http:/www.culture.local,浏览器将返回一个错误页面,如图1-27所示。错误页面提示没有权限访问资源,这是因为Apache服务器没有设置culture目录的访问权限。
403Forbidden + | 口 | |||||||||
不安全 | www.culture.local | A☆ | ||||||||
Forbidden | ||||||||||
Youdon'thavepermissiontoaccessthisresource. | ||||||||||
Apache/2.4.53(Win64)OpenSSL/1.1.1nPHP/7.4.29Serveratwww.culture.localPort 80 |
4.设置访问权限
在httpd-vhosts.conf文件的末尾加入下面的代码。
<Directory "C:/Webapps/culture"> Options Indexes Require all granted
</Directory>
在Apache 服务器的配置文件中,<Directory>标签用于指定特定目录的访问权限,OptionsIndexes表示启用目录索引功能。当访问该目录时,如果没有指定具体的文件名,服务器将显示该目录下的文件列表。Requireallgranted表示允许所有用户访问该目录,这意味着服务器将允许任何用户通过HTTP请求访问culture目录中的文件。
保存配置后重启Apache服务器,通过浏览器打开http://www.culture.local,浏览器将返回结果页面,如图1-28所示。

项目小结
本项目主要介绍了如何搭建PHP 运行环境,以及运行PHP脚本的相关知识。首先介绍了PHP的相关内容、PHP运行环境、常见的PHP运行环境集成软件以及通过XAMPP搭建PHP运行环境。然后介绍了运行PHP脚本,包括PHP常用的开发工具、PHP脚本运行方式,以及编写并运行PHP脚本。本项目通过理论知识和实践任务的结合,帮助读者更好地了解和掌握PHP的运行环境和脚本执行过程,为后续内容的学习打好基础。
课后习题
一、选择题
1.静态网页是指(
A.可以实时更新内容的网页B.只包含静态文本和图像的网页C.使用动态脚本语言创建的网页D.只能在本地计算机上访问的网页
2.动态网页技术的一个主要优势是( )。
A.更高的安全性
B.更快的加载速度
C.可以根据用户的输入和交互动态地生成内容
D.更好的兼容性
3.PHP是一种( )。
A.编程语言 B.操作系统 C.数据库 D.网络协议
4. ( )能够提供Web服务。
A. phpMyAdmin B.XAMPP C. MySQL D. Visual Studio Code
5. ( )是HTTP 的默认端口。
A. 21 B. 80 C. 3306 D. 443
二、填空题
1.PHP是一种 端脚本语言,用于服务器端开发和动态网页生成。
2.PHP文件的扩展名通常为
3.PHP运行的基本原理是将PHP脚本发送到 由其解释执行,然后将结果返回给客户端浏览器。
5.Apache 的配置文件通常是 ,它包含Apache的各种设置选项。
项目2PHP语言基础
【知识目标】
·理解PHP的基本语法。
·理解变量和常量。理解运算符和流程控制语句。
·理解命名空间。理解函数。
【能力目标】
·能够正确命名标识符。
·能够定义和使用变量。
·能够定义和使用常量。能够使用运算符进行运算。能够使用流程控制语句实现业务逻辑。能够使用命名空间和文件引入管理代码。
·能够自定义函数解决问题。
【素质目标】
·培养解决实际问题的能力。
·培养分析和处理数据的能力。
·培养创新意识和创造力。
情境引人 生成话剧介绍页面
话剧是一种舞台表演艺术形式,通常以文字对白和演员表演为主要方式。中国话剧是在中国传统文化和现代戏剧形式相互融合的基础上发展起来的一种戏剧艺术。
为了弘扬红色文化、传承革命精神,某话剧社特别策划了光影铸魂一—红色话剧周活动。这一活动的核心目标是提高红色话剧在社会中的关注度。这些话剧可以激发观众的爱国情感,传承红色基因。
在话剧社官方网站和社交媒体平台上,需要呈现生动、富有创意的动态页面,通过话剧海报、剧照等内容,以一种更具互动性的形式来展示话剧艺术的发展历程。本项目将带领大家实现话剧介绍页面的制作。
任务2.1PHP基础知识
相关知识
2.1.1标记
通常情况下,一个PHP文件同时包含HTML代码和PHP代码,PHP代码需要放在PHP标记内部。PHP标记以 ^{*}<? php”表示开始,以 ^{*}2>^{*} 表示结束。如果当前PHP文件只包含PHP代码,则可以省略结束标记。
//这里非PHP代码<?php
//这里是PHP代码?>

当PHP解析器执行PHP文件时,PHP解析器会寻找PHP的开始标记和结束标记,解析开始标记和结束标记之间的代码,按照PHP语法运行,没有放在PHP标记内的内容会被解析器直接输出。
2.1.2注释
注释是指在代码中进行解释说明的内容。注释可以提高代码的可读性,有利于代码后期维护。PHP支持3种风格的注释。

“/"”表示 ^{\mathsf{C}++} 风格的单行注释,该行代码会被注释掉。
“#”表示Shell风格的单行注释,该行代码会被注释掉。
以“/\*”开头、“\*”结尾的为多行注释,中间的代码会被注释掉。
【例2-1】下面的代码演示了PHP的3种风格注释的使用。
<?php
echo"使用“//”可以完成单行注释<br>";//echo"看不见我";
echo"使用“#”可以完成单行注释<br>";#echo"看不见我";
echo"使用“/\*\*/”可以完成多行注释";/\*
echo"看不见我";
echo"看不见我";
echo"看不见我";
^{\star}/
?>
程序运行结果如图2-1所示,通过结果可以看到注释内容并没有出现在页面中。

2.1.3标识符与关键字
在编程语言中,标识符用于命名变量、函数、类、对象等程序元素。标识符遵循一系列命名规则,以确保代码的清晰性和一致性。在PHP中,定义标识符需要遵循以下几点。
(1)标识符只能由数字、字母和下画线构成。
(2)标识符不能以数字开头。
(3)标识符在作为变量名时,区分大小写。
例如,title、var123和_name是合法的标识符,而123var、-name和title\*是非法的标识符。
关键字是指编程语言中的保留字,它们具有特定的意义,用于定义程序的结构和功能等。关键字不能被用作变量名、函数名或其他标识符,因为它们在语言的语法规则中扮演着固定的角色。PHP常见关键字如表2-1所示。
_halt_compiler | abstract | and | array | as |
break | callable | case | catch | class |
clone | const | continue | declare | default |
die | do | echo | else | elseif |
empty | enddeclare | endfor | endforeach | endif |
endswitch | endwhile | eval | extends | |
final | finally | fn | foreach | |
function | 0106 | if | implements | |
include | include_once | instanceof | insteadof | interface |
isset | list | namespace | new | J0 |
private | protected | public | require | |
require_once | return | static | switch | try |
trait | throw | unset | use | var |
while | xor | yield | yield from |
关键字是编程语言的核心组成部分,正确理解和使用关键字对于编写高效、可读性强的程序代码至关重要。
2.1.4变量的概念
在编程中,变量用于存储数据值。它相当于一个容器,可以在程序运行时向其中放入数据,并在需要时读取或修改这些数据。变量使得程序能够动态地处理数据,而不是在程序编写完毕后就不能改变。变量通常具有以下几个基本属性。
1.变量名
变量名是变量的名称,用于在代码中引用变量。在大多数编程语言中,变量名必须遵循一定的命名规则,比如只能包含字母、数字和下画线,以及不能以数字开头。
2.数据类型
数据类型指变量可以存储的数据的类型。在某些语言中,变量的数据类型在声明时指定。不需要在声明变量时指定数据类型的语言称为弱类型语言。在弱类型语言中,变量可以在运行时改变数据类型。
3.值
值是变量存储的实际数据,在程序执行过程中可以改变。
4.作用域
作用域指变量在程序中的可见范围。有些变量在整个程序中都是可见的,而有些只在特定的代码块中可见。
5.生命周期
生命周期指变量从被创建到被销毁的时间。有些变量在函数调用结束后不再存在,而有些变量可能在整个程序运行期间都存在。
PHP是一种弱类型语言,变量的数据类型在运行时可以改变,所以在PHP中声明变量的时候不需要指定数据类型,PHP解析器会根据传入的值自动判断数据类型。
PHP中的变量名需要遵循以下要求。
(1)变量名必须以符号$为前缀。
(2)变量名只能由数字、字母和下画线构成。
(3)变量名不能以数字开头。
(4)变量名区分大小写。
例如,年龄( \mathbb{S} age)身高(height)家庭地址(\mathbb{S}address)可以理解为变量名,“20”“168.5"^{*}x\times小区\times\times栋\times\times$ 室”是变量值,整型、浮点型、字符串型是变量类型。变量值可以改变,例如年龄今年为 20、明年为21,身高变为168.8或者搬家后家庭地址发生变化。
age=20$
height=168.5$ :
addres{s}="{xx}小区_{xx}栋_{xx}室"; //同一个变量名对应的值发生变化age ^{=21}
height\!\,=\!1\,68\cdot8$
\mathfrak{S} address = "yy小区yy栋yy室";
变量名应由有意义的单词组成,以使代码便于理解。如果变量名较长,则建议使用驼峰式或者下画线式的命名规则,如studentName、\mathbb{S}$ student_name。
2.1.5语句与代码块
PHP脚本由一系列PHP语句组成,而PHP语句由表达式和分号组成。编程语言中的表达式是值、变量、常量、函数和运算符的组合,表达式能够计算出结果。PHP需要在每条语句后面使用英文分号“;”作为分隔符,表示当前语句结束。如果某条语句是整个PHP 脚本的最后一条语句,则其后的分号可以省略。
如果多条语句之间存在关系,如函数、逻辑控制、类的定义等,则可以用一对大括号“{}”将这几条语句括起来,表示这是一个代码块。大括号的后面不需要加分号。
【例2-2】下面的代码演示了PHP语句和代码块的使用。
<?php//赋值语句,需要加上分号作为分隔符arr=『"富强","民主","文明","和谐","自由","平等","公正","法治","爱国","敬业","诚信","友善"];//函数调用语句,需要加上分号作为分隔符var_dump (arr) ;//输出语句,需要加上分号作为分隔符echo "<br>";//函数定义,大括号代码块里面的内容表示函数体,大括号的后面不需要加分号function hello(){echo "hello ";echo "welcome to China!";/\*函数调用语句,同时是“PHP结束标记”前的最后一条语句,所以分号可以省略\*/hello ()?>
程序运行结果如图2-2所示。注意代码注释说明的哪些地方必须加分号,哪些地方可以不加分号。

var_dump()、echo 和 print_r()在 PHP 中都可以用于输出变量信息,它们各自有不同的用途和输出格式。
1. var_dump()
var_dump()是一个非常强大的函数,用于输出一个或者多个变量的详细信息,包括数据类型、值和长度等。
2. echo
echo可以输出一个或多个变量,但只能输出它们的值,不能输出变量的详细信息。echo不能用来直接输出数组的内容。
3. print_r()
print_r()函数类似于var_dump()函数,它也输出变量的值和数据类型,但它的输出更易于阅读,通常用于展示数组和对象的结构。
任务实践
2.1.6动态生成话剧介绍页面
在网页设计和开发中,可以将一个网页理解成由结构和内容两大部分构成。
1.结构
结构是网页的骨架,它决定了页面的布局和组织方式。结构使用不同的HTML标签将页面划分成不同的部分,例如<nav>表示导航栏、<header>表示页眉、<footer>表示页脚、<p>表示段落等。
结构还涉及CSS,它负责页面的视觉样式,如颜色、字体、间距、布局等。CSS允许开发者将样式与内容分离,使得页面的视觉效果可以独立于HTML结构进行设计和调整。
结构还包括JavaScript代码,它负责页面的交互性,如响应用户的单击、表单提交、动态内容加载等。
2.内容
内容是网页的实际信息,包括文本、图片、视频、音频等。内容是用户访问网页的主要目的,它传递信息、讲述故事或提供服务。
内容通常存储在服务器的数据库中,通过服务器端脚本动态生成,或者直接嵌入HTML文件。
【例2-3】演示使用PHP动态输出内容,生成话剧介绍页面。
2-3.html是一个基本的HTML网页文件,用HTML和CSS来生成静态网页的结构,用于展示话剧介绍的静态页面,代码如下。
<!DOCTYPE html> <html lang="zh-CN">
<head> <meta charset = "UTF-8"> <metaname = "viewport"content = "width = device-width, initial-scale \mathrel{\mathop:} .0"> <title>话剧《xxx》介绍</title> <style> body{ font-family: 'Arial', sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; .container{
max-width: 1200px margin: auto; padding: 0 20px header { background: 4333 : color: #fff; padding: 20p x0 text-align: center;
header h1 {margin: 0;font-size: 2,5\mathtt{r e m} :
nav{ background: #e8491d; padding: 10px 0;
nav ul{ list-style: none; padding: 0; display: flex; justify-content: center;
nav li {margin: 0 20px :
nav a{ color: #fff; text-decoration: none; font-size: 1,2\mathtt{r e m}
nav a:hover{ text-decoration: underline;
.image-gallery img { max-width: 300px border: 1px solid #ccc; padding: 5px; footer { background-color: #333; color: #fff; text-align: center; padding: 20px 0; </style> </head> <body> <header> <h1>话剧《xxx》介绍</h1> </header> <nav> <ul> <li><a href \stackrel{.}{=} "#" > 首页 < /a></li> <li<a href \dot{}= "#">关于我们</a></1i> <li>a href \dot{}= "#">即将上映</a></li> </ul> </nav> <div class = "container"> <section id \equiv "main-content" class = "main-content"> <h2>剧情概要</h2> <p>(在这里添加剧情概要的详细内容)</p> <h2>剧照展示</h2> <div class = "image-gallery"> <img sro = "path-to-your-image1.jpg" alt = "话剧《xxx》剧照 {1"} <img sro = "path-to-your-image2.jpg" alt = "话剧《xxx》剧照 2"> <img sro = "path-to-your-image3.jpg" alt = "话剧《xxx》剧照 3"> <!-- 添加更多图片--> </div> </section> </div> <footer> <p>版权所有©;2024 话剧社</p> </footer> </body> </html>

在创建话剧介绍的静态页面时,我们已经完成了页面的基本结构,包括布局、导航和样式。为了使页面内容能够根据具体的话剧信息动态更新,我们需要引I入动态语言,如PHP。这样,每当有新的话剧信息需要展示时,我们可以通过服务器端脚本动态地生成内容,而不用手动更新每个静态页面。
使用PHP的输出语句(如echo语句)将从数据库中检索到的数据插入HTML模板的相应位置。这样每次加载页面时,都会显示最新的话剧信息。
将2-3.html的内容另存为2-3.php,使用echo语句在代码需要生成内容的地方进行内容输出,替换图 2-3所示的话剧名、剧情概要、剧照展示。2-3.php使用PHP动态生成话剧介绍页面,代码如下。
<!DOCTYPE html > <html lang := "zh-CN"> <?php
title=$ "上甘岭";
introduce=$ "该话剧以上甘岭战役中的坑道为主场景,讲述了一群具有钢铁意志的志愿军战士,在断粮断水、弹药缺乏、与组织失去通信联络的情况下,面对敌人的强大炮火英勇无畏、顽强坚守阵地的故事。";
//剧照1
img1=$ "./imgs/placeholder_l.png"; //剧照2
img2=$ "./imgs/placeholder_2.png"; //剧照3
img3="./imgs/placeholder_3.png";?>$
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width = device-width, initial-scale ^{=1} .0">
<title>话剧《 <\mathrel{?}=\S title?>》介绍</title>
<style> body font-family: 'Arial', sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; .container { max-width: 1200px margin: auto; padding:0 20px header { background: #333; color: #fff; padding: 20px 0; text-align: center; ) header hl { margin: 0; font-size: 2.5rem; nav { background: #e8491d; padding: 10px 0; nav ul { list-style: none; padding: 0; display: flex; justify-content: center; nav li { margin: 0 20px nav a { color: #fff; text-decoration: none; font-size: 1.2rem; nav a:hover { text-decoration: underline; .main-content { margin: 40px 0; .image-gallery { display: flex; flex-wrap: wrap; justify-content: space-around; gap: 20px; .image-gallery img { max-width: 300px border: 1px solid #ccc; padding: 5px; footer { background-color: #333; color: #fff; text-align: center; padding: 20px 0; </style>
</head>
<body> <header> <h1>话剧《 <\ref{s i x}= title?>》介绍</h1> </header> <nav> <ul> <li><a href\stackrel{1}{=}"#">首页</a></li> <li><a href\stackrel{\cdot}{=}"#">关于我们</a></1i> <li>a href\stackrel{\cdot}{=}"#">即将上映</a></1i> </ul> </nav> <div class="container"> <section id="main-content" class="main-content"> <h2>剧情概要</h2>\anglep><?=introduce ?></p> <h2>剧照展示</h2> <div class = "image-gallery"> <img sro = <?= img1?>"alt="话剧《<\!?\!=title ?> 》剧照 \mathbb{1}^{\mathfrak{w}}> <img sro = <?= img2?>" alt="话剧《<\!?\!=title ?> 》剧照 2"> <img sro = <?= img3?>"alt="话剧《<\!?\!=title ?> 》剧照 3"> <!-- 添加更多图片--> </div> </section> </div>
动态生成话剧介绍页面内容的运行结果如图2-4所示。

在PHP代码中,定义了几个变量,包括title(话剧名)\mathbb{\Phi}introduce(话剧介绍)\mathbb{S}mg1、\mathbb{S}mg2和img3(剧照图片)。这些变量将在HTML代码的后续部分中使用。在需要显示内容的地方,代码通过使用PHP的短标记 <?=?> ,将话剧的标题、介绍和剧照动态地插入HTML页面。
在PHP中, <?=?> 是一个短标记,它允许开发者在HTML文件中输出表达式的值。使用短标记可以让代码更加简洁,而不需要使用完整的<?php?>标记和echo语句。短标记不需要在表达式后面使用分号来结束语句。
任务2.2认识数据类型
相关知识
编程语言操作计算机中的数据,每种数据都有对应的类型。PHP是一种弱类型语言,因为PHP中的变量在使用时不需要声明数据类型,在程序运行过程中可以被多次赋予不同类型的值。PHP提供了三大类数据类型,分别是标量数据类型、复合数据类型和特殊数据类型。
2.2.1标量数据类型
PHP的标量数据类型是最基本的数据类型,总共有4种,分别是布尔型、整型、浮点型和字符串型。
1.布尔型(boolean)
布尔型只有两个值,分别是true和false,表示逻辑真和逻辑假,通常在流程控制语句里面使用。
2.整型(integer)
整型值包括正整数、负整数和0,可以用二进制、八进制、十进制和十六进制表示值。整型值最前面可以加上“+”或“-”来表示正数或负数,在数字前面加上0b来表示二进制,加上0表示八进制,加上 _{0x} 表示十六进制。
整型值的取值范围和操作系统有关,PHP中可以通过常量PHP_INT_MIN获取整型值的最小值,通过常量PHP_INT_MAX获取整型值的最大值。
需要注意的是,如果一个整型值的大小超出了整型值的取值范围,那么PHP会把这个值解析成浮点型值。
3.浮点型(float)
浮点型值是含有小数点的数字,浮点型值最前面可以加上“+”或“-”表示正数或负数。浮点型值支持科学计数表示法。例如,3.14和314e-2都是浮点型值。
4.字符串型(string)
在PHP 中,字符串是由字符序列组成的数据类型,它可以包含字母、数字以及特殊字符。PHP 提供了4种不同的字符串表示方式:单引l号(")、双引l号(")、heredoc结构和nowdoc结构。
【例2-4】下面的代码演示了标量数量类型的基本用法。
<?php
//输出布尔值false
var_dump(false) ;
//输出十六进制数0xff
var_dump(0xff) ;
//输出浮点型值3.14
var_dump(3.14) ;
//输出字符串“社会主义核心价值观”var_dump("社会主义核心价值观");
//判断布尔值是否为标量
echo "布尔值是标量?".is_scalar(false)."<br>";//判断十六进制数是否为标量
echo"整型值是标量?",is_scalar(Oxff)."<br>";//判断浮点型值是否为标量
echo“浮点型值是标量?".is_scalar(3.14)."<br>";//判断字符串是否为标量
echo"字符串是标量?".is_scalar("社会主义核心价值观");?>
标量数据类型的基本用法运行结果如图2-5所示。
代码首先使用var_dump()函数来展示 4个不同类型值的详细信息:一个布尔值、一个整型值、一个浮点型值和一个字符串。接着,代码利用is_SCalar()函数来测试这些变量是否属于标量数据类型。is_Scalar()函数可以判断一个值是否为标量数据类型,如果是则返回true,否则返回false。在实际运行
PHP程序设计
结果中,尽管is_scalar()函数确实返回了true,但在使用echo 函数输出时,布尔值 true 会被自动转换为整型值1。

【例2-5】下面的代码演示了4种字符串的使用。
<?php//输出字符串echo"<h4>字符串中转义字符</h4>";//双引引号转义echo"行胜于言的翻译是\"actions speak louder than words\"<br>";//单引号转义echo‘单引号\‘中\\141输出的结果是字符\141<br>';//双引|号转义和八进制转义字符echo"双引|号\"中\\141输出的结果是字符\141<br>";//定义一个字符串str="不负时代,不负韶华,不负党和人民的殷切期望!";//输出字符串echo"<h4>字符串中变量解析</h4>"echo‘单引引号字符串中str的值是{str}<br>';echo"双引号字符串中str 的值是{str}<br>";//输出heredoc语法结构字符串echo<<<EOF<div style="margin-top: 20px;"><button type="button" onclick="alert('str')" style := "padding:5px 15px;">点我</button></div>EOF;?>
4 种字符串的使用运行结果如图2-6所示。
代码主要用来演示4种字符串中的转义字符和变量解析的使用方法,通过echo将字符串输出到浏览器中。
在双引|号字符串中使用大括号“{}”包围变量时,PHP解析器会在运行时将变量的值插入字符串的相应位置。这种语法可以将变量的值直接嵌入字符串,而不需要使用字符串运算符“”来拼接字符串。

在单引号字符串中,变量以及除反斜线“”和单引号“”以外的特殊字符不会被解析。在这种情况下,字符串内容会被视为纯文本,不会进行变量或其他特殊字符的解析。
在双引号字符串中,变量会被解析成其对应的值,并且PHP解析器还会对特殊字符进行转义解析。这意味着双引|号字符串中的变量会被替换为其实际值,同时特殊字符也会被正确解释和处理。
这种差异使得开发者可以根据需要选择合适的引|号类型来构建字符串。如果需要包含变量或者特殊字符的转义,则使用双引|号。如果不需要这些特性,那么单引号通常更简洁。常用的转义字符如表2-2所示。
转义字符 | 说明 |
In | 换行 |
回车符 | |
水平制表符 | |
= | 反斜线 |
I$ | 美元符 |
双引号 | |
单引号 | |
[0-7]{1,3} | 一个以八进制来表示的字符 |
x[0-9A-Fa-f{1,2} | 一个以十六进制来表示的字符 |
\u{[O-9A-Fa-f]+} | 一个以unicode编码来表示的字符 |
使用heredoc语法结构来创建多行字符串时,需要以3个小于号“<<<”开始,紧接一个自定义标识符(这个标识符就是字符串的结束标志),然后换行。字符串内容可以跨越多行,直到遇到与
PHP程序设计
开始处相同的标识符,并且这个标识符必须独占一行,不能有其他字符或空格。标识符遵循PHP的命名规则,只能包含字母、数字和下画线,且必须以字母或下画线开头。heredoc语法结构示例代码如下。
heredoc语法结构在PHP中非常适用于处理包含大量文本的数据,尤其是当文本中需要包含单引I号或双引号时,因为这些引号在heredoc中不需要转义。这使得编写和维护代码变得非常方便。
nowdoc语法结构与heredoc非常相似,只是nowdoc的开始标识符需要用单引号引起来。但是nowdoc不会解析字符串中的变量,在nowdoc字符串中,变量不会被替换为它们的值,而是保持原样输出。nowdoc语法结构示例代码如下。
2.2.2复合数据类型
与标量数据类型只包含一个值不同,复合数据类型可以包含多个值。PHP提供了两种复合数据类型,分别是数组和对象。
1.数组
数组(array)是由多个元素组成的集合,每个元素都是一个键值对,其中键(key)可以是整型或字符串型,而值(value)可以是任何数据类型。在创建数组时,如果多个元素被赋予相同的键名,那么只有最后一个元素的值会被保留,之前的值会被覆盖。如果数组中的某个值本身也是一个数组,那么称这种结构为多维数组。
在 PHP 中,数组可以通过多种方式定义。一种常见的方法是使用array()函数,该函数接受由逗号分隔的键值对作为参数,其基本语法如下。
array(valuel, value2, value3,...)
如果未指定键名,那么PHP会自动为数组分配整型键名,通常是在现有最大整型键名的基础上加1(从0开始计数)。这种使用数字作为索引的数组称为索引数组。
当需要使用更有意义的键名来提高代码的可读性和维护性时,可以使用字符串作为键名,这样的数组称为关联数组。关联数组的基本语法如下。
array ("key1" => valuel, "key2" \rightharpoondown value2, "key3" \rightharpoondown value3,...)
关联数组允许使用字符串作为索引来访问数组中的元素,这在处理具有特定含义的数据时非常有用。
另一种更简洁的数组创建方法是使用短数组语法,它允许直接使用中括号来定义数组,其基本语法如下。
//关联数组简写方式
["keyl" \rightharpoondown valuel, "key2" \rightharpoondown value2, "key3" \rightharpoondown value3,...]
//索引数组简写方式
[valuel, value2, value3,...]
十,PHP还支持直接使用赋值语句来创建或修改数组,其基本语
arr[]=value;//向索引数组末尾添加新元素arr[n] = value;//创建或修改数组中索引l为n的元素值arr["key"]=value;//创建或修改关联数组中键为\mathtt{k e y}$ 的元素值
在PHP中,要访问数组中的特定元素,需要使用数组变量名,后面跟上中括号“[]”,并在中括号内指定元素的键名。如果是索引数组,则直接使用数字;如果是关联数组,则需要将键名放在单引号或双引号中。
2.对象
对象(object)是面向对象编程中的一个核心概念,它代表类的具体实例。在PHP中,类是用户定义的一种数据结构,它封装了数据和操作这些数据的方法。使用new关键字创建一个类的实例时,就创建了一个对象。
【例2-6】下面的代码演示了数组的基本用法。
<?php
//使用array()函数完整赋值
movie_list=array("yxen"=>“英雄儿女","sgl"=>"上甘岭","ssdhx"\rightharpoondown"闪闪的红星","ddz"=>$ "地道战"
var_dump($movie_list);
echo "<hr>";
// 使[完整赋值
movie_listl=[0=>"英雄儿女",_{~1~}=>"上甘岭","ssdhx"\rightharpoondown$ "闪闪的红星","地道战"
];
var_dump($movie_listl);
echo "<hr>";
//使用 array()函数省略key赋值
movie_list2=$ array("英雄儿女","上甘岭","闪闪的红星","地道战");
var_dump($movie_list2) ;
echo "<hr>";
//使用[]省略key赋值
movie_list3=$ ["英雄儿女","上甘岭","闪闪的红星","地道战"];
var_dump($movie_list3) ;
echo "<hr>";
/ / 通过数组的 key 访问 value
echo $movie_list3[0];
// 通过数组的 key 修改 value
movie_list3[0]=$ "小兵张嘎";
echo "<br>";
echo $movie_list3[0];
?>
数组的基本用法运行结果如图2-7所示。
代码演示了在PHP中如何使用array(函数和[门来创建数组,其中包含完整的键值对和省略键的情况。通过var_dump()函数可以清晰地看到数组的键值对关系,关联数组的键是字符串型,索引数组的键是整型。数组$movie_ist1比较特殊,它既有字符串键,也有数字键,是一个混合数组。此外,代码
PHP程序设计(项目式)(微课
还演示了如何通过键来访问和修改数组中的值。

2.2.3特殊数据类型
在PHP中,存在两种特殊的数据类型,分别是资源和空值。
1.资源
在PHP中,资源(reSource)用于表示对外部资源的引I用,如文件句柄、数据库连接等。资源类型的主要作用是让PHP与外部系统进行交互,而这些外部系统的实际实现在PHP之外。对资源类型的引用通常需要通过相关函数来创建,而这些函数负责在PHP中建立连接或关联到外部资源。不再需要这些资源时需要通过函数进行释放,以避免资源泄露。
2.空值
在PHP中,空值(nuIl)表示一个变量没有被赋予任何值。这可能是因为变量未经赋值、被明确赋值为 null或者经过unset()函数处理。空值在变量的生命周期中处于有效的状态,它告诉我们这个变量当前没有包含任何数据。
【例2-7】下面的代码演示了特殊数据类型的使用。
<?php
//打开文件2-7.php
echo 'file=fopen("2-7.php","r") :';file = fopen("2-7.php", "r");
//输出文件句柄
var_dump($file) ;
//初始化CURL句柄
echo 'url=curl_init("127.0.0.1") :';url = curl_init("127.0.0.1") ;
//输出 CURL 句柄
var_dump ($url) ;
//销毁文件句柄
unset ($file);
//输出文件句柄
var_dump($file);
//输出 null
var_dump (null) ;
?>
特殊数据类型的使用运行结果如图2-8所示。

代码展示了PHP中几种特殊的数据类型,包括文件句柄、CURL句柄以及null。文件句柄用于在PHP中访问外部文件,而CURL句柄则用于访问网络资源,这两者都属于资源类型。
2.2.4数据类型判断
在实际使用中,可能需要明确数据的具体类型。为了完成这一任务,可以利用PHP提供的一系列数据类型判断函数,常用的数据类型判断函数如表2-3所示。
函数名 | 说明 |
is_arrayo | 检测参数是否是数组 |
is_boolo | 检测参数是否是布尔值 |
is_callable() | 检测参数是否为合法的可调用结构 |
函数名 | 说明 |
is_float() | 检测参数是否是浮点型 |
is_int() | 检测参数是否是整型 |
is_iterable() | 检测参数的内容是否是可选代的值 |
Oinu s! | 检测参数是否为null |
is_numeric() | 检测参数是否为数字或数字字符串 |
is_objectO) | 检测参数是否是对象 |
is_resource() | 检测参数是否为资源类型 |
is_scalar() | 检测参数是否是标量 |
is_stringo | 检测参数是否是字符串 |
【例2-8】下面的代码演示了常用数据类型判断函数的使用。
<?php
//判断变量 S x 是否为整型
9x~=~2021
echo ' 5x~=~2021 ,is_int( \varsigma_{X}) :';
var_dump (is_int (\mathbb{S}x) );
//判断变量Sy是否为整型
\mathfrak{S}\mathfrak{Y}\ =\ ^{\mathfrak{m}}2021"
echo \sf S y=\nabla*\nabla}2021" ,is_int($y) :';
var_dump(is_int($y));
//判断变量$y是否为数字或数字字符串
echo \mathbf{\nabla}5\mathbf{y}~=~\mathbf{\nabla}\mathbf{"}2021\mathbf{"} ,is_numeric($y) :';
var_dump (is_numeric ( \varsigma_{\boldsymbol{Y}}) );
//判断变量$movie_list是否为可迭代的值
movie_list=["英雄儿女","上甘岭","闪闪的红星","地道战"]; echo 'is_iterable(movie_list) :';
var_dump (is_iterable ($movie_list));
// 定义函数my_fn()
function my_fn()
//判断函数my_fn()是否为合法的可调用结构
echo 'is_callable(my_fn) :';
var_dump(is_callable('my_fn'));
?>
常用数据类型判断函数的使用运行结果如图2-9所示。
代码通过使用不同的函数来判断变量的类型和可选代性,并使用var_dump(函数输出判断结果。
数据类型判断函数会根据传入的值判断是否符合指定类型,如果是则返回true,否则返回false。变量y 是一个包含数字的字符串,因此 is_int()函数返回 false,is_numeric()函数返回 true。变量\mathbb{\Phi}$ movie_list是数组类型,由于数组可以被选代,因此 is_iterable()函数返回 true。而my_fn(是一个可调用函数,因此 is_callable()函数返回 true。

2.2.5数据类型转换
PHP是一种弱类型语言,不需要事先定义变量类型,而是根据所赋的值自动解析类型。在实际使用中,可能会遇到接收到的数据类型与所需数据类型不一致的情况,这时需要进行数据类型转换。在下面这些情况下,PHP会自动执行数据类型转换。
1.转布尔值
在转布尔值时,若值为0、0.0、“0”、空字符串、空数组、null或创建失败的资源,就会被自动转换为false;而非O数字、非空字符串、非空数组、对象和有效资源会被自动转换为true。
2.转数字
在进行算术运算时,布尔值的false会被转换成O,true会被转换成1。
字符串会从左边开始转换为数字,直到遇到第一个非数字字符为止。例如,“12.3abc”在进行算术运算时会自动转换成浮点型值12.3。
而在无法进行自动转换的情况下,就需要手动进行强制数据类型转换。强制数据类型转换有3种方式:使用(进行强制转换、使用专用数据类型转换函数和使用通用数据类型转换函数。
1.使用()进行强制转换
要进行强制数据类型转换,可以在待转换的变量或值前面使用括号括起来以指定目标数据类型。例如,(int)3.14表示将浮点型值 3.14 强制转换为整型值,结果为 3;(boolean)"PHP"表示将字符串“PHP”强制转换为布尔值,结果为true。
2.使用专用数据类型转换函数
PHP提供了一系列专用数据类型转换函数,通过这些函数,可以将参数值转换成指定的数据类型。例如,intval(3.14)将浮点型值3.14转换为整型值,boolval("PHP")将字符串“PHP”转换为布尔值。专用数据类型转换函数如表2-4所示。