目录
一、什么是 PHP
PHP,全称为 “PHP: Hypertext Preprocessor” ,即超文本预处理器 ,是一种被广泛应用的开源服务器端脚本语言,尤其适合 Web 开发。它可以无缝嵌入到 HTML 中,让开发者能够轻松创建动态网页和交互式 Web 应用程序。
从诞生之初,PHP 就凭借其简单易用、灵活高效的特性,在 Web 开发领域崭露头角。如今,无论是小型个人博客,还是像 Facebook、Wikipedia 这样的大型网站,PHP 都发挥着重要作用,是 Web 开发领域中不可或缺的一部分。在全球范围内,大量的网站和 Web 应用都基于 PHP 构建,这足以证明它在行业中的地位和影响力。
二、环境搭建
在开始使用 PHP 进行开发之前,我们需要搭建一个合适的开发环境。这包括安装 PHP、选择并配置 Web 服务器,以及可选的数据库安装。下面将详细介绍各个步骤。
2.1 安装 PHP
- Windows 系统:
-
首先,前往PHP 官方网站下载合适的 PHP 安装包。建议选择 “Non Thread Safe”(非线程安全)版本,对于一般的 Web 开发项目来说,这个版本已经足够使用。
-
下载完成后,将安装包解压到你希望安装 PHP 的目录,例如 “C:\php” 。
-
接下来是配置环境变量。右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”,然后在 “系统属性” 窗口中点击 “环境变量” 按钮。在 “系统变量” 中找到 “Path” 变量,点击 “编辑”,在弹出的编辑环境变量窗口中,点击 “新建”,将 PHP 的安装目录(例如 “C:\php”)添加进去,然后点击 “确定” 保存设置。
-
配置 PHP 的配置文件。在 PHP 安装目录中,将 “php.ini-development” 或 “php.ini-production” 文件复制一份,并改名为 “php.ini” 。用文本编辑器打开 “php.ini” 文件,进行一些常见的配置修改,比如设置时区:将 “date.timezone = Asia/Shanghai” 前面的分号去掉,确保 PHP 使用正确的时区;设置扩展目录:找到 “extension_dir” 选项,将其值改为 “php 安装目录 \ext”,例如 “extension_dir = C:\php\ext”,这样 PHP 才能找到并加载扩展模块。
-
最后,打开命令提示符(CMD),输入 “php -v”,如果成功显示 PHP 的版本信息,说明 PHP 安装成功。
- Linux 系统:
不同的 Linux 发行版安装 PHP 的方式略有不同,这里以 Ubuntu 为例:
打开终端,使用包管理器安装 PHP。输入以下命令:
sudo apt update
sudo apt install php
安装完成后,可以通过命令 “php -v” 查看 PHP 版本,验证是否安装成功。
如果需要安装特定的 PHP 扩展,例如 MySQL 扩展,可以使用以下命令:
sudo apt install php-mysql
- macOS 系统:
首先安装 Homebrew,它是一款适用于 macOS 的包管理器,可让安装和管理软件包变得轻松。打开终端应用程序,运行以下命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装完 Homebrew 之后,使用它来安装 PHP。在终端应用程序中运行以下命令:
brew install php
安装完成后,通过运行 “php -v” 命令验证已安装的 PHP 版本。
如果需要配置 PHP,可以通过运行 “php --ini” 命令查找 “php.ini” 文件位置,然后使用文本编辑器打开文件进行必要的更改。
2.2 选择合适的 Web 服务器
常见的 Web 服务器有 Apache 和 Nginx,它们各有特点:
-
Apache:是最流行的 Web 服务器之一,具有丰富的模块和广泛的社区支持,配置相对简单,适合初学者和对服务器性能要求不是特别高的项目。
-
Nginx:以高性能、高并发处理能力著称,在处理静态资源和反向代理方面表现出色,适合对性能要求较高、访问量较大的网站和应用。
下面以 Apache 为例,介绍如何与 PHP 集成:
-
安装 Apache,在 Windows 系统中,可以从Apache 官方网站下载安装包进行安装;在 Linux 系统中,使用包管理器安装,例如在 Ubuntu 中,执行 “sudo apt install apache2”。
-
安装完成后,配置 Apache 以支持 PHP。找到 Apache 的配置文件 “httpd.conf” (在 Windows 中,通常位于 Apache 安装目录的 “conf” 文件夹下;在 Linux 中,一般位于 “/etc/apache2/” 目录下)。
-
打开 “httpd.conf” 文件,添加以下配置:
LoadModule php_module "C:/php/php7apache2_4.dll" # 根据实际PHP安装路径和版本修改
PHPIniDir "C:/php" # 根据实际PHP安装路径修改
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
- 保存配置文件,重启 Apache 服务器,使配置生效。在 Windows 中,可以通过服务管理界面重启 Apache 服务;在 Linux 中,执行 “sudo systemctl restart apache2”。
- 以 Nginx 为例,与 PHP 集成的步骤如下:
- 安装 Nginx,在 Ubuntu 中,执行 “sudo apt install nginx”。
- 安装 PHP-FPM(FastCGI Process Manager),它是 PHP 的一个高效的进程管理器,负责处理 PHP 请求并生成动态的网页内容。执行 “sudo apt install php-fpm php-mysql”。
- 配置 Nginx 与 PHP-FPM 通信。打开 Nginx 的配置文件,一般位于 “/etc/nginx/sites-available/default”,添加以下配置:
server {
listen 80;
server_name example.com; # 替换为你的域名或IP
root /var/www/html; # 设置网站根目录
index index.php index.html; # 设置默认首页文件
location / {
try_files $uri $uri/ =404; # 如果请求的文件或目录不存在,返回404错误
}
# 配置处理PHP脚本的请求
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 指定PHP-FPM的监听地址,这里使用Unix套接字,根据实际PHP版本修改
fastcgi_index index.php; # 设置默认PHP脚本文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 传递脚本文件路径给PHP解释器
include fastcgi_params; # 包含其他fastcgi参数配置
}
}
保存配置文件,启用配置并重启 Nginx 和 PHP-FPM 服务:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm # 根据实际PHP版本修改
2.3 安装数据库(可选)
PHP 与数据库结合使用可以实现数据的存储、读取和管理,大大增强 Web 应用的功能。MySQL 是最常用的数据库之一,以下是 MySQL 的安装和基本配置过程:
Windows 系统:
-
从MySQL 官方网站下载 Windows 版本的 MySQL 安装包,选择适合你系统的版本(32 位或 64 位)。
-
运行安装包,按照安装向导的提示进行安装。在安装过程中,可以选择安装类型(如 “Developer Default” 开发者默认、“Server only” 仅服务器、“Client only” 仅客户端、“Full” 完整安装、“Custom” 自定义安装等),一般选择 “Custom” 自定义安装,可以自行选择安装路径和组件。
-
安装完成后,进行基本配置。打开 MySQL 安装目录下的 “my.ini” 或 “my.cnf” 配置文件(如果没有,可以复制一份 “my-default.ini” 并改名为 “my.ini”),设置数据库的基本参数,例如端口号(默认 3306)、字符集(建议设置为 UTF-8 以支持多语言)等。
-
配置环境变量,将 MySQL 的 “bin” 目录添加到系统的 “Path” 环境变量中,方便在命令行中直接使用 MySQL 命令。
-
启动 MySQL 服务,可以通过 Windows 服务管理界面找到 “MySQL” 服务并启动,也可以在命令行中执行 “net start mysql” 启动服务。
-
首次启动 MySQL 后,需要设置 root 用户的密码。打开命令提示符,输入 “mysql -u root -p”,然后按照提示输入新密码。
Linux 系统:
以 Ubuntu 为例:
- 打开终端,使用包管理器安装 MySQL:
sudo apt update
sudo apt install mysql-server
- 安装过程中,系统会提示设置 root 用户的密码。
- 安装完成后,MySQL 服务会自动启动。可以通过以下命令检查 MySQL 服务状态:
sudo systemctl status mysql
- 为了增强安全性,可以运行 MySQL 的安全配置脚本:
sudo mysql_secure_installation
按照提示进行操作,例如设置 root 密码策略、删除匿名用户、禁止 root 远程登录等。
macOS 系统:
- 可以使用 Homebrew 安装 MySQL,在终端中执行:
brew install mysql
- 安装完成后,按照提示启动 MySQL 服务:
brew services start mysql
- 首次启动后,同样需要设置 root 用户的密码,打开终端,输入 “mysql -u root -p”,然后设置密码。
安装好 MySQL 后,PHP 可以通过 MySQLi 扩展或 PDO(PHP Data Objects)扩展来连接和操作数据库。例如,使用 MySQLi 扩展连接数据库的示例代码如下:
<?php
$servername = "localhost";
$username = "root";
$password = "your_password";
$dbname = "your_database";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: ". $conn->connect_error);
}
echo "连接成功";
$conn->close();
?>
通过以上步骤,我们完成了 PHP 开发环境的搭建,包括 PHP 的安装、Web 服务器的配置以及数据库的安装(可选)。接下来,就可以开始编写 PHP 代码,开发各种 Web 应用程序了。
三、PHP 基础语法
3.1 变量与数据类型
在 PHP 中,变量是存储数据的容器,使用前无需声明数据类型,变量的数据类型会根据赋值自动确定。变量以美元符号$开头,后面跟变量名 ,变量名必须以字母或下划线开头,可包含字母、数字和下划线 ,且区分大小写。例如:
$name = "张三";
$age = 20;
$isStudent = true;
PHP 支持七种基本数据类型,每种类型都有其独特的特点和适用场景:
- 字符串(String):是由字符组成的文本数据,可使用单引号或双引号包围。例如:
$str1 = 'Hello, World!';
$str2 = "你好,世界!";
字符串拼接使用.运算符,如$newStr = $str1. " ". $str2; ,结果为Hello, World! 你好,世界!。
- 整数(Integer):是没有小数部分的数字,可以是正数、负数或零 。例如:
$int1 = 123;
$int2 = -456;
- 浮点数(Float):又称双精度数,是有小数部分的数字 。例如:
$float1 = 3.14;
$float2 = -0.75;
- 数组(Array):是一种可以存储多个值的数据类型,可分为索引数组和关联数组 。索引数组通过数字索引访问元素,例如:
$fruits = array("apple", "banana", "cherry");
// 或使用短数组语法
$fruits = ["apple", "banana", "cherry"];
关联数组使用键名来访问元素,例如:
$person = array("name" => "李四", "age" => 25);
// 或使用短数组语法
$person = ["name" => "李四", "age" => 25];
- 对象(Object):是类的实例,包含属性和方法,是面向对象编程的核心 。例如:
class Car {
public $color;
public function setColor($color) {
$this->color = $color;
}
}
$myCar = new Car();
$myCar->setColor("red");
- 布尔类型(Boolean):表示真(true)或假(false),常用于条件判断 。例如:
$isSuccess = true;
$isError = false;
- 空值(Null):是一个特殊的数据类型,表示变量没有值或值为 “无” 。例如:
$var = NULL;
3.2 运算符与表达式
运算符是构建表达式的基础,PHP 中的运算符丰富多样,包括算术运算符、比较运算符、逻辑运算符等 。
- 算术运算符:用于基本的数学运算,如加法(+)、减法(-)、乘法(*)、除法(/)、模运算(%)、指数运算(**)以及自增(++)和自减(--)运算符。示例如下:
$a = 10;
$b = 3;
echo $a + $b; // 输出13
echo $a - $b; // 输出7
echo $a * $b; // 输出30
echo $a / $b; // 输出3.3333333333333(浮点数)
echo $a % $b; // 输出1
echo $a ** 2; // 输出100(PHP 5.6+ 支持指数运算)
$c = 5;
echo $c++; // 先输出5,然后$c变为6
echo ++$c; // $c先变为7,然后输出7
- 比较运算符:用于比较两个值,并返回布尔值true或false 。常见的比较运算符有等价(==)、恒等(===)、不等(!=或<>)、不恒等(!==)、大于(>)、大于等于(>=)、小于(<)和小于等于(<=)。示例如下:
$x = 10;
$y = "10";
var_dump($x == $y); // 输出bool(true),因为等价运算符进行类型转换
var_dump($x === $y); // 输出bool(false),因为恒等运算符不进行类型转换,类型不同
var_dump($x != $y); // 输出bool(false)
var_dump($x!== $y); // 输出bool(true)
var_dump($x > 5); // 输出bool(true)
var_dump($x >= 10); // 输出bool(true)
var_dump($x < 15); // 输出bool(true)
var_dump($x <= 10); // 输出bool(true)
- 逻辑运算符:用于组合多个条件,进行逻辑判断 。主要的逻辑运算符有逻辑与(&& 或 and)、逻辑或(|| 或 or)、逻辑异或(xor)和逻辑非(!)。示例如下:
$a = true;
$b = false;
var_dump($a && $b); // 输出bool(false)
var_dump($a || $b); // 输出bool(true)
var_dump($a xor $b); // 输出bool(true)
var_dump(!$a); // 输出bool(false)
需要注意的是,&&和and,||和or的功能相同,但优先级不同 。&&和||的优先级高于and和or。例如:
$c = true;
$d = false;
$result1 = $c || $d and false; // 相当于 ($c || $d) and false ,结果为false
$result2 = ($c || $d) && false; // 结果为false
$result3 = $c || ($d && false); // 结果为true
-
赋值运算符:最基本的赋值运算符是=,用于将右侧表达式的值赋给左侧的变量 。还有一些复合赋值运算符,如+=、-=、*=、/=、%=、.=等,这些运算符在进行赋值操作的同时,还会进行相应的运算。示例如下:
$x = 5;
$x += 3; // 相当于 $x = $x + 3 ,$x变为8
$y = "Hello";
$y.= " World"; // 相当于 $y = $y. " World" ,$y变为"Hello World"
-
其他运算符:如字符串连接运算符(.),用于连接两个字符串 ;三元运算符(? :),根据条件选择执行不同的表达式 ,语法为(expr1)? (expr2) : (expr3),当expr1为true时,返回expr2,否则返回expr3 。自 PHP 5.3 起,可以省略三元运算符中间那部分,表达式expr1?: expr3在expr1求值为true时返回expr1,否则返回expr3 。例如:
$age = 20;
$message = ($age >= 18)? "你已成年" : "你未成年";
echo $message; // 输出"你已成年"
$name = isset($_GET['user'])? $_GET['user'] : 'nobody';
// PHP 5.3+ 版本写法
$name = $_GET['user']?: 'nobody';
PHP 7+ 新增了 NULL 合并运算符(??),例如$username = $_GET['user']?? 'nobody'; ,如果$_GET['user']不存在返回'nobody',否则返回$_GET['user']的值 ;还有组合比较符(<=>),也叫太空船操作符,用于比较两个值 ,如果$a > $b,则$a <=> $b的值为1 ;如果$a == $b,则值为0 ;如果$a < $b,则值为-1 。例如:
echo 1 <=> 1; // 输出0
echo 1 <=> 2; // 输出-1
echo 2 <=> 1; // 输出1
3.3 流程控制语句
流程控制语句用于控制程序的执行顺序,是编写 PHP 程序的重要组成部分 ,主要包括条件判断语句和循环语句 。
- 条件判断语句:
- if - else 语句:是最基本的条件判断结构,根据条件的真假来执行不同的代码块 。语法为:
if (条件表达式) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}
例如:
$age = 20;
if ($age >= 18) {
echo "你已成年";
} else {
echo "你未成年";
}
- if - else if - else 语句:当需要进行多个条件判断时使用 。语法为:
if (条件表达式1) {
// 条件1为真时执行的代码
} else if (条件表达式2) {
// 条件1为假且条件2为真时执行的代码
} else {
// 所有条件都为假时执行的代码
}
例如:
$score = 85;
if ($score >= 90) {
echo "成绩为A";
} else if ($score >= 80) {
echo "成绩为B";
} else if ($score >= 70) {
echo "成绩为C";
} else {
echo "成绩为D";
}
- switch 语句:用于基于不同条件执行不同的代码块,适用于对同一个变量进行多种不同值的判断 。语法为:
switch (表达式) {
case 值1:
// 表达式等于值1时执行的代码
break;
case 值2:
// 表达式等于值2时执行的代码
break;
// 可以有多个case语句
default:
// 表达式与所有case值都不匹配时执行的代码
break;
}
例如:
$day = "Monday";
switch ($day) {
case "Monday":
echo "今天是星期一";
break;
case "Tuesday":
echo "今天是星期二";
break;
default:
echo "其他日期";
break;
}
- 循环语句:
- for 循环:常用于已知循环次数的场景,包含初始化、条件判断和递增 / 递减三个部分 。语法为:
for (初始化表达式; 条件表达式; 递增/递减表达式) {
// 循环体