电子商务网站开发教程
1. PHP 简介和历史
1.1 PHP 简介
PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,特别适用于Web开发。PHP脚本在服务器端执行,生成动态网页内容。
1.2 PHP 历史
PHP 最初由 Rasmus Lerdorf 于1994年创建,作为个人主页工具。经过多次版本迭代,PHP 5 和 PHP 7 带来了显著的性能提升和功能增强。
2. 环境搭建
2.1 XAMPP 安装
XAMPP 是一个集成了 Apache、MySQL、PHP 和 Perl 的开发环境。
- 下载 XAMPP 安装包。
- 运行安装程序,选择安装路径。
- 启动 XAMPP 控制面板,启动 Apache 和 MySQL 服务。
2.2 WAMP 安装
WAMP 是 Windows 下的 Apache + MySQL + PHP 环境。
- 下载 WAMP 安装包。
- 运行安装程序,选择安装路径。
- 启动 WAMP 服务,确保 Apache 和 MySQL 正常运行。
3. 基本语法和数据类型
3.1 基本语法
PHP 脚本以 <?php 开始,以 ?> 结束。
<?php
echo "Hello, World!";
?>
3.2 数据类型
PHP 支持多种数据类型,包括整型、浮点型、字符串、布尔型、数组、对象等。
$intVar = 10;
$floatVar = 10.5;
$stringVar = "Hello";
$boolVar = true;
4. 变量和常量
4.1 变量
变量以 $ 符号开头,赋值使用 =。
$name = "John";
$age = 25;
4.2 常量
常量使用 define() 函数定义,一旦定义不能修改。
define("PI", 3.14159);
echo PI;
5. 运算符和表达式
5.1 运算符
PHP 支持算术运算符、比较运算符、逻辑运算符等。
$sum = 10 + 20;
$isEqual = ($sum == 30);
5.2 表达式
表达式是 PHP 代码的基本构建块,可以是变量、常量、运算符组合等。
$result = $sum * 2;
6. 条件语句
6.1 if-else 语句
根据条件执行不同的代码块。
if ($age >= 18) {
echo "You are an adult.";
} else {
echo "You are a minor.";
}
6.2 switch 语句
多分支选择结构。
switch ($day) {
case "Monday":
echo "Today is Monday.";
break;
case "Tuesday":
echo "Today is Tuesday.";
break;
default:
echo "It's another day.";
}
7. 循环
7.1 for 循环
重复执行指定次数的代码块。
for ($i = 0; $i < 5; $i++) {
echo "Number: $i\n";
}
7.2 while 循环
在条件为真时重复执行代码块。
$i = 0;
while ($i < 5) {
echo "Number: $i\n";
$i++;
}
7.3 do-while 循环
先执行一次代码块,再根据条件决定是否重复执行。
$i = 0;
do {
echo "Number: $i\n";
$i++;
} while ($i < 5);
7.4 foreach 循环
遍历数组或对象的每个元素。
$colors = array("red", "green", "blue");
foreach ($colors as $color) {
echo "Color: $color\n";
}
8. 跳转语句
8.1 break 语句
跳出循环或 switch 语句。
for ($i = 0; $i < 10; $i++) {
if ($i == 5) {
break;
}
echo "Number: $i\n";
}
8.2 continue 语句
跳过当前循环迭代,继续下一次迭代。
for ($i = 0; $i < 10; $i++) {
if ($i % 2 == 0) {
continue;
}
echo "Odd Number: $i\n";
}
9. 函数定义和调用
9.1 函数定义
使用 function 关键字定义函数。
function greet($name) {
echo "Hello, $name!";
}
9.2 函数调用
调用函数并传递参数。
greet("Alice");
10. 参数和返回值
10.1 参数
函数可以接受多个参数。
function add($a, $b) {
return $a + $b;
}
10.2 返回值
函数可以返回一个值。
$sum = add(10, 20);
echo "Sum: $sum";
11. 变量作用域
11.1 全局作用域
全局变量在函数外部定义,可以在任何地方访问。
$globalVar = "Global";
function test() {
global $globalVar;
echo $globalVar;
}
11.2 局部作用域
局部变量在函数内部定义,只能在函数内部访问。
function test() {
$localVar = "Local";
echo $localVar;
}
12. 匿名函数和闭包
12.1 匿名函数
没有名字的函数,通常用作回调函数。
$greet = function($name) {
echo "Hello, $name!";
};
$greet("Bob");
12.2 闭包
闭包是匿名函数的一种,可以访问其定义范围内的变量。
$message = "Hello";
$greet = function($name) use ($message) {
echo "$message, $name!";
};
$greet("Charlie");
13. 索引数组和关联数组
13.1 索引数组
使用数字索引的数组。
$fruits = array("apple", "banana", "cherry");
echo $fruits[0]; // 输出 "apple"
13.2 关联数组
使用字符串键的数组。
$person = array("name" => "John", "age" => 25);
echo $person["name"]; // 输出 "John"
14. 多维数组
14.1 多维数组
数组中的元素也是数组。
$matrix = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
echo $matrix[1][2]; // 输出 6
15. 数组操作函数
15.1 常用数组函数
PHP 提供了丰富的数组操作函数。
$numbers = array(3, 1, 4, 1, 5, 9);
sort($numbers);
print_r($numbers); // 输出排序后的数组
16. 字符串函数
16.1 常用字符串函数
PHP 提供了多种字符串操作函数。
$text = "Hello, World!";
echo strlen($text); // 输出 13
echo str_replace("World", "PHP", $text); // 输出 "Hello, PHP!"
17. 正则表达式
17.1 正则表达式基础
正则表达式用于匹配字符串模式。
$pattern = "/php/i";
$text = "PHP is fun!";
if (preg_match($pattern, $text)) {
echo "Match found!";
}
18. 类和对象
18.1 类定义
使用 class 关键字定义类。
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function greet() {
echo "Hello, my name is $this->name and I am $this->age years old.";
}
}
18.2 对象实例化
使用 new 关键字创建对象。
$person = new Person("Alice", 30);
$person->greet();
19. 继承和多态
19.1 继承
子类继承父类的属性和方法。
class Student extends Person {
public $studentId;
public function __construct($name, $age, $studentId) {
parent::__construct($name, $age);
$this->studentId = $studentId;
}
public function study() {
echo "$this->name is studying.";
}
}
19.2 多态
不同类的对象调用相同方法时表现不同。
$student = new Student("Bob", 20, "S12345");
$student->greet(); // 输出 "Hello, my name is Bob and I am 20 years old."
$student->study(); // 输出 "Bob is studying."
20. 接口和抽象类
20.1 接口
定义一组方法,实现类必须实现这些方法。
interface Greetable {
public function greet();
}
class Person implements Greetable {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function greet() {
echo "Hello, my name is $this->name.";
}
}
20.2 抽象类
不能实例化,只能被继承。
abstract class Animal {
abstract public function makeSound();
}
class Dog extends Animal {
public function makeSound() {
echo "Woof!";
}
}
21. 命名空间
21.1 命名空间定义
避免类名冲突。
namespace MyApp;
class MyClass {
public function sayHello() {
echo "Hello from MyApp!";
}
}
21.2 命名空间使用
使用 use 关键字引入命名空间。
use MyApp\MyClass;
$obj = new MyClass();
$obj->sayHello();
22. 特性 (Traits)
22.1 Traits 定义
Traits 是一种代码复用机制。
trait Logger {
public function log($message) {
echo "Log: $message";
}
}
class MyClass {
use Logger;
public function doSomething() {
$this->log("Something happened.");
}
}
22.2 Traits 使用
在类中使用 use 关键字引入 Trait。
$obj = new MyClass();
$obj->doSomething(); // 输出 "Log: Something happened."
23. 异常处理
23.1 异常处理基础
使用 try-catch 块处理异常。
try {
throw new Exception("Something went wrong.");
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
23.2 自定义异常
定义自己的异常类。
class MyException extends Exception {
public function __construct($message) {
parent::__construct($message);
}
}
try {
throw new MyException("Custom error.");
} catch (MyException $e) {
echo "Custom Error: " . $e->getMessage();
}
24. 错误报告和日志
24.1 错误报告
设置错误报告级别。
error_reporting(E_ALL);
ini_set('display_errors', 1);
24.2 日志记录
使用 error_log 记录日志。
error_log("An error occurred.", 3, "/path/to/error.log");
25. 文件读写
25.1 文件读取
使用 file_get_contents 读取文件内容。
$content = file_get_contents("example.txt");
echo $content;
25.2 文件写入
使用 file_put_contents 写入文件内容。
file_put_contents("example.txt", "Hello, World!");
26. 目录操作
26.1 创建目录
使用 mkdir 创建目录。
mkdir("new_directory");
26.2 删除目录
使用 rmdir 删除目录。
rmdir("new_directory");
27. 文件上传处理
27.1 文件上传表单
创建文件上传表单。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
27.2 文件上传处理
处理上传的文件。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile);
echo "File uploaded successfully.";
}
28. MySQL 基础
28.1 连接数据库
使用 mysqli 连接 MySQL 数据库。
$conn = new mysqli("localhost", "username", "password", "database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
28.2 执行查询
执行 SQL 查询。
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}
29. PDO 数据库抽象层
29.1 PDO 连接
使用 PDO 连接数据库。
$dsn = "mysql:host=localhost;dbname=database";
$username = "username";
$password = "password";
try {
$pdo = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
29.2 执行查询
使用 PDO 执行查询。
$sql = "SELECT * FROM users";
$stmt = $pdo->query($sql);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}