本指南包含 PHP 的核心概念、详细注释和实例代码,帮助您快速学习 PHP 技术。
PHP(Hypertext Preprocessor)是一种通用开源脚本语言,特别适用于 Web 开发。PHP 代码可以在服务器端执行,生成动态网页内容。
// PHP 工作流程:
// 1. 客户端发送 HTTP 请求到服务器
// 2. Web 服务器(如 Apache、Nginx)接收请求
// 3. PHP 引擎解析并执行 PHP 代码
// 4. PHP 代码生成 HTML 内容
// 5. 服务器将 HTML 响应返回给客户端
// 6. 浏览器渲染并显示网页
// Windows 系统安装 PHP
// 1. 访问 https://windows.php.net/download/
// 2. 下载 PHP 压缩包
// 3. 解压到指定目录(如 C:\php)
// 4. 配置环境变量
// 5. 配置 php.ini 文件
// Linux 系统安装 PHP
sudo apt-get update
sudo apt-get install php php-mysql php-gd php-mbstring
// macOS 系统安装 PHP
brew install php
// 安装 Apache
// Windows: 下载 Apache 并安装
// Linux:
sudo apt-get install apache2
// 安装 Nginx
// Windows: 下载 Nginx 并安装
// Linux:
sudo apt-get install nginx
// 安装 MySQL
// Windows: 下载 MySQL 并安装
// Linux:
sudo apt-get install mysql-server
// 安装 MariaDB
sudo apt-get install mariadb-server
// XAMPP(Windows、Linux、Mac)
// 下载地址:https://www.apachefriends.org/
// WAMP(Windows)
// 下载地址:https://www.wampserver.com/
// MAMP(Mac)
// 下载地址:https://www.mamp.info/
// 标准 PHP 标记
<?php
echo "Hello, PHP!";
?>
// 短标记(需要配置 php.ini)
<? echo "Hello, PHP!"; ?>
// 短输出标记
<?= "Hello, PHP!" ?>
// 脚本标记
<script language="php">
echo "Hello, PHP!";
</script>
// 单行注释
// 这是单行注释
// 另一种单行注释
# 这也是单行注释
// 多行注释
/*
这是多行注释
可以跨越多行
*/
// 输出字符串
echo "Hello, PHP!"; // 输出:Hello, PHP!
// 输出多个字符串
echo "Hello, ", "PHP!"; // 输出:Hello, PHP!
// 输出并返回值
print "Hello, PHP!"; // 输出:Hello, PHP!
// 输出变量的详细信息
$var = "Hello";
var_dump($var); // 输出:string(5) "Hello"
// 格式化输出
printf("Hello, %s!", "PHP"); // 输出:Hello, PHP!
// 定义变量
$name = "张三";
$age = 25;
$isStudent = true;
// 变量命名规则
// 1. 必须以 $ 符号开头
// 2. 变量名必须以字母或下划线开头
// 3. 变量名只能包含字母、数字和下划线
// 4. 变量名区分大小写
// 可变变量
$var = "name";
$$var = "李四"; // 等同于 $name = "李四"
echo $name; // 输出:李四
// 变量作用域
$globalVar = "全局变量";
function testScope() {
// 使用 global 关键字访问全局变量
global $globalVar;
echo $globalVar; // 输出:全局变量
// 局部变量
$localVar = "局部变量";
echo $localVar; // 输出:局部变量
}
testScope();
// 定义常量
define("PI", 3.14159);
echo PI; // 输出:3.14159
// 使用 const 关键字(PHP 5.3+)
const MAX_SIZE = 100;
echo MAX_SIZE; // 输出:100
// 常量命名规则
// 1. 通常使用大写字母
// 2. 可以包含字母、数字和下划线
// 3. 不需要 $ 符号
// 魔术常量
echo __LINE__; // 当前行号
echo __FILE__; // 当前文件路径
echo __DIR__; // 当前目录路径
echo __FUNCTION__; // 当前函数名
echo __CLASS__; // 当前类名
echo __METHOD__; // 当前方法名
echo __NAMESPACE__; // 当前命名空间
<?php
// 定义变量
$name = "张三";
$age = 25;
// 输出内容
echo "姓名: " . $name . "\n";
echo "年龄: " . $age . "\n";
// 使用常量
define("SITE_NAME", "我的网站");
echo "网站名称: " . SITE_NAME . "\n";
// 使用魔术常量
echo "当前文件: " . __FILE__ . "\n";
echo "当前行号: " . __LINE__ . "\n";
// 可变变量
$var = "name";
$$var = "李四";
echo "可变变量: " . $name . "\n";
?>
// 整数
$int = 123;
$hex = 0x1A; // 十六进制
$oct = 0123; // 八进制
$bin = 0b1010; // 二进制(PHP 5.4+)
// 浮点数
$float = 3.14;
$scientific = 1.2e3; // 科学计数法
// 字符串
$string1 = "双引号字符串";
$string2 = '单引号字符串';
$heredoc = <<<EOT
这是 Heredoc 语法
可以跨越多行
EOT;
$nowdoc = <<<'EOT'
这是 Nowdoc 语法
不解析变量
EOT;
// 布尔值
$bool1 = true;
$bool2 = false;
// 数组
// 索引数组
$fruits = ["苹果", "香蕉", "橙子"];
$fruits = array("苹果", "香蕉", "橙子");
// 关联数组
$user = [
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
];
// 多维数组
$users = [
[
"name" => "张三",
"age" => 25
],
[
"name" => "李四",
"age" => 30
]
];
// 对象
class User {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$user = new User("张三", 25);
echo $user->name; // 输出:张三
// NULL
$null = null;
// 资源类型
$file = fopen("test.txt", "r");
// 类型检测
var_dump(is_int(123)); // bool(true)
var_dump(is_string("hello")); // bool(true)
var_dump(is_array([1, 2, 3])); // bool(true)
var_dump(is_object(new stdClass())); // bool(true)
var_dump(is_null(null)); // bool(true)
// 强制类型转换
$int = (int)"123"; // 转换为整数
$float = (float)"3.14"; // 转换为浮点数
$string = (string)123; // 转换为字符串
$bool = (bool)1; // 转换为布尔值
$array = (array)"hello"; // 转换为数组
// 类型转换函数
$int = intval("123"); // 转换为整数
$float = floatval("3.14"); // 转换为浮点数
$string = strval(123); // 转换为字符串
// 自动类型转换
$sum = "10" + 20; // 输出:30(字符串自动转换为整数)
<?php
// 标量类型
$int = 123;
$float = 3.14;
$string = "Hello, PHP!";
$bool = true;
// 输出类型和值
var_dump($int); // int(123)
var_dump($float); // float(3.14)
var_dump($string); // string(12) "Hello, PHP!"
var_dump($bool); // bool(true)
// 数组
$fruits = ["苹果", "香蕉", "橙子"];
$user = [
"name" => "张三",
"age" => 25
];
// 遍历数组
foreach ($fruits as $fruit) {
echo "水果: " . $fruit . "\n";
}
// 类型转换
$number = (int)"123";
echo "转换后的数字: " . $number . "\n";
?>
// 加法
$sum = 10 + 5; // 15
// 减法
$diff = 10 - 5; // 5
// 乘法
$product = 10 * 5; // 50
// 除法
$quotient = 10 / 5; // 2
// 取模
$remainder = 10 % 3; // 1
// 幂运算(PHP 5.6+)
$power = 2 ** 3; // 8
// 等于
var_dump(10 == "10"); // bool(true)(值相等)
// 全等于
var_dump(10 === "10"); // bool(false)(值和类型都相等)
// 不等于
var_dump(10 != "10"); // bool(false)
// 不全等于
var_dump(10 !== "10"); // bool(true)
// 大于
var_dump(10 > 5); // bool(true)
// 小于
var_dump(10 < 5); // bool(false)
// 大于等于
var_dump(10 >= 10); // bool(true)
// 小于等于
var_dump(10 <= 10); // bool(true)
// 太空船运算符(PHP 7+)
var_dump(1 <=> 1); // int(0)(相等)
var_dump(1 <=> 2); // int(-1)(小于)
var_dump(2 <=> 1); // int(1)(大于)
// 逻辑与
$result = (true && false); // false
// 逻辑或
$result = (true || false); // true
// 逻辑非
$result = !true; // false
// 逻辑异或
$result = (true xor false); // true
// 短路求值
$result = (true && false); // false(不会执行后面的表达式)
$result = (false || true); // true(不会执行后面的表达式)
// 赋值
$x = 10;
// 加法赋值
$x += 5; // $x = $x + 5
// 减法赋值
$x -= 5; // $x = $x - 5
// 乘法赋值
$x *= 5; // $x = $x * 5
// 除法赋值
$x /= 5; // $x = $x / 5
// 取模赋值
$x %= 5; // $x = $x % 5
// 连接赋值
$str = "Hello";
$str .= " World"; // "Hello World"
// 字符串连接
$str1 = "Hello";
$str2 = "World";
$result = $str1 . " " . $str2; // "Hello World"
// 字符串重复(PHP 8.0+)
echo str_repeat("Hello ", 3); // "Hello Hello Hello "
<?php
// 算术运算符
$a = 10;
$b = 5;
echo "加法: " . ($a + $b) . "\n"; // 15
echo "减法: " . ($a - $b) . "\n"; // 5
echo "乘法: " . ($a * $b) . "\n"; // 50
echo "除法: " . ($a / $b) . "\n"; // 2
echo "取模: " . ($a % $b) . "\n"; // 1
// 比较运算符
echo "10 == '10': " . (10 == "10" ? "true" : "false") . "\n"; // true
echo "10 === '10': " . (10 === "10" ? "true" : "false") . "\n"; // false
// 逻辑运算符
$x = true;
$y = false;
echo "true && false: " . ($x && $y ? "true" : "false") . "\n"; // false
echo "true || false: " . ($x || $y ? "true" : "false") . "\n"; // true
// 字符串运算符
$str1 = "Hello";
$str2 = "World";
echo "字符串连接: " . $str1 . " " . $str2 . "\n"; // Hello World
?>
// if 语句
if ($condition) {
// 条件为真时执行
}
// if-else 语句
if ($condition) {
// 条件为真时执行
} else {
// 条件为假时执行
}
// if-elseif-else 语句
if ($condition1) {
// 条件1为真时执行
} elseif ($condition2) {
// 条件2为真时执行
} else {
// 所有条件都为假时执行
}
// switch 语句
switch ($value) {
case 1:
// $value 等于 1 时执行
break;
case 2:
// $value 等于 2 时执行
break;
default:
// 默认情况
break;
}
// for 循环
for ($i = 0; $i < 10; $i++) {
echo $i . "\n";
}
// while 循环
$i = 0;
while ($i < 10) {
echo $i . "\n";
$i++;
}
// do-while 循环
$i = 0;
do {
echo $i . "\n";
$i++;
} while ($i < 10);
// foreach 循环
$fruits = ["苹果", "香蕉", "橙子"];
foreach ($fruits as $fruit) {
echo $fruit . "\n";
}
// foreach 循环(关联数组)
$user = ["name" => "张三", "age" => 25];
foreach ($user as $key => $value) {
echo "$key: $value\n";
}
// break 语句
for ($i = 0; $i < 10; $i++) {
if ($i == 5) {
break; // 跳出循环
}
echo $i . "\n";
}
// continue 语句
for ($i = 0; $i < 10; $i++) {
if ($i % 2 == 0) {
continue; // 跳过本次迭代
}
echo $i . "\n";
}
// return 语句
function test() {
return "返回值";
}
// goto 语句(PHP 5.3+)
goto label;
echo "这行不会执行";
label:
echo "跳转到这里";
<?php
// if-else 语句
$score = 85;
if ($score >= 90) {
echo "优秀\n";
} elseif ($score >= 80) {
echo "良好\n";
} elseif ($score >= 60) {
echo "及格\n";
} else {
echo "不及格\n";
}
// for 循环
echo "1 到 10 的数字:\n";
for ($i = 1; $i <= 10; $i++) {
echo $i . " ";
}
echo "\n";
// foreach 循环
$fruits = ["苹果", "香蕉", "橙子"];
echo "水果列表:\n";
foreach ($fruits as $index => $fruit) {
echo ($index + 1) . ". " . $fruit . "\n";
}
// while 循环
echo "倒计时:\n";
$count = 5;
while ($count > 0) {
echo $count . " ";
$count--;
}
echo "\n";
?>
// 基本函数定义
function greet($name) {
return "Hello, " . $name . "!";
}
echo greet("张三"); // 输出:Hello, 张三!
// 带默认参数的函数
function greetWithDefault($name = "World") {
return "Hello, " . $name . "!";
}
echo greetWithDefault(); // 输出:Hello, World!
echo greetWithDefault("张三"); // 输出:Hello, 张三!
// 值传递
function increment($num) {
$num++;
}
$x = 5;
increment($x);
echo $x; // 输出:5(值不改变)
// 引用传递
function incrementByRef(&$num) {
$num++;
}
$x = 5;
incrementByRef($x);
echo $x; // 输出:6(值改变)
// 可变参数(PHP 5.6+)
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(1, 2, 3, 4, 5); // 输出:15
// 返回单个值
function add($a, $b) {
return $a + $b;
}
// 返回多个值(使用数组)
function getPerson() {
return [
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
];
}
$person = getPerson();
echo $person["name"]; // 输出:张三
// 返回多个值(使用列表)
function getCoordinates() {
return [10, 20];
}
[$x, $y] = getCoordinates();
echo "x: $x, y: $y"; // 输出:x: 10, y: 20
// 参数类型声明
function add(int $a, int $b): int {
return $a + $b;
}
echo add(1, 2); // 输出:3
// echo add(1.5, 2.5); // 报错:参数必须是整数
// 返回类型声明
function divide(float $a, float $b): float {
return $a / $b;
}
echo divide(10, 2); // 输出:5
// 可空类型(PHP 7.1+)
function getName(?string $name): ?string {
return $name;
}
echo getName(null); // 输出:null
echo getName("张三"); // 输出:张三
// 匿名函数
$greet = function($name) {
return "Hello, " . $name . "!";
};
echo $greet("张三"); // 输出:Hello, 张三!
// 闭包(使用 use 关键词)
$message = "Hello";
$greet = function($name) use ($message) {
return $message . ", " . $name . "!";
};
echo $greet("张三"); // 输出:Hello, 张三!
// 作为回调函数
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(function($num) {
return $num * $num;
}, $numbers);
print_r($squared); // 输出:[1, 4, 9, 16, 25]
<?php
// 基本函数
function greet($name) {
return "Hello, " . $name . "!";
}
echo greet("张三") . "\n";
// 带默认参数的函数
function calculatePrice($price, $tax = 0.1) {
return $price * (1 + $tax);
}
echo "价格: " . calculatePrice(100) . "\n";
echo "价格: " . calculatePrice(100, 0.2) . "\n";
// 可变参数函数
function sum(...$numbers) {
return array_sum($numbers);
}
echo "总和: " . sum(1, 2, 3, 4, 5) . "\n";
// 匿名函数
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(function($num) {
return $num * $num;
}, $numbers);
echo "平方数: ";
echo implode(", ", $squared) . "\n";
?>
// 索引数组
$fruits = ["苹果", "香蕉", "橙子"];
$fruits = array("苹果", "香蕉", "橙子");
// 关联数组
$user = [
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
];
// 多维数组
$users = [
[
"name" => "张三",
"age" => 25
],
[
"name" => "李四",
"age" => 30
]
];
// 范围数组
$numbers = range(1, 10); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// 访问索引数组元素
$fruits = ["苹果", "香蕉", "橙子"];
echo $fruits[0]; // 输出:苹果
echo $fruits[1]; // 输出:香蕉
// 访问关联数组元素
$user = ["name" => "张三", "age" => 25];
echo $user["name"]; // 输出:张三
echo $user["age"]; // 输出:25
// 访问多维数组元素
$users = [
["name" => "张三", "age" => 25],
["name" => "李四", "age" => 30]
];
echo $users[0]["name"]; // 输出:张三
// 添加元素
$fruits = ["苹果", "香蕉"];
$fruits[] = "橙子"; // 添加到末尾
array_push($fruits, "葡萄"); // 添加到末尾
// 删除元素
unset($fruits[0]); // 删除指定元素
array_pop($fruits); // 删除末尾元素
array_shift($fruits); // 删除开头元素
// 添加关联数组元素
$user = ["name" => "张三"];
$user["age"] = 25; // 添加元素
// 删除关联数组元素
unset($user["age"]); // 删除指定元素
// 数组长度
$count = count($fruits); // 数组元素个数
// 检查元素是否存在
$exists = in_array("苹果", $fruits); // 检查值是否存在
$exists = array_key_exists("name", $user); // 检查键是否存在
// 获取所有键
$keys = array_keys($user); // ["name", "age", "email"]
// 获取所有值
$values = array_values($user); // ["张三", 25, "zhangsan@example.com"]
// 合并数组
$merged = array_merge($array1, $array2);
// 排序
sort($fruits); // 升序排序
rsort($fruits); // 降序排序
asort($user); // 升序排序(保持键值关联)
ksort($user); // 按键升序排序
// 数组切片
$sliced = array_slice($fruits, 0, 2); // 获取前两个元素
// 数组过滤
$filtered = array_filter($numbers, function($num) {
return $num % 2 == 0;
}); // 过滤偶数
<?php
// 创建数组
$fruits = ["苹果", "香蕉", "橙子"];
$user = [
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
];
// 遍历数组
echo "水果列表:\n";
foreach ($fruits as $fruit) {
echo "- " . $fruit . "\n";
}
// 数组操作
echo "\n数组操作:\n";
echo "数组长度: " . count($fruits) . "\n";
echo "是否包含苹果: " . (in_array("苹果", $fruits) ? "是" : "否") . "\n";
// 添加元素
$fruits[] = "葡萄";
echo "添加葡萄后的数组: " . implode(", ", $fruits) . "\n";
// 数组过滤
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$even = array_filter($numbers, function($num) {
return $num % 2 == 0;
});
echo "偶数: " . implode(", ", $even) . "\n";
// 数组排序
sort($fruits);
echo "排序后的水果: " . implode(", ", $fruits) . "\n";
?>
// 获取字符串长度
$length = strlen("Hello, PHP!"); // 11
// 获取多字节字符串长度(中文)
$length = mb_strlen("你好,PHP!"); // 6
// 查找字符串
$pos = strpos("Hello, PHP!", "PHP"); // 7
$pos = strrpos("Hello, PHP, PHP!", "PHP"); // 12(最后一次出现的位置)
// 替换字符串
$replaced = str_replace("PHP", "World", "Hello, PHP!"); // "Hello, World!"
// 不区分大小写的替换
$replaced = str_ireplace("php", "World", "Hello, PHP!"); // "Hello, World!"
// 截取字符串
$substring = substr("Hello, PHP!", 0, 5); // "Hello"
$substring = substr("Hello, PHP!", 7); // "PHP!"
// 截取多字节字符串
$substring = mb_substr("你好,PHP!", 0, 2); // "你好"
// 分割字符串
$parts = explode(",", "苹果,香蕉,橙子"); // ["苹果", "香蕉", "橙子"]
// 连接字符串
$string = implode(",", ["苹果", "香蕉", "橙子"]); // "苹果,香蕉,橙子"
// 连接数组元素
$string = join(",", ["苹果", "香蕉", "橙子"]); // "苹果,香蕉,橙子"
// 格式化字符串
$formatted = sprintf("Hello, %s!", "PHP"); // "Hello, PHP!"
$formatted = sprintf("数字: %d, 浮点数: %.2f", 123, 3.14159); // "数字: 123, 浮点数: 3.14"
// 去除空格
$trimmed = trim(" Hello, PHP! "); // "Hello, PHP!"
$trimmed = ltrim(" Hello, PHP! "); // "Hello, PHP! "
$trimmed = rtrim(" Hello, PHP! "); // " Hello, PHP!"
// 大小写转换
$upper = strtoupper("hello"); // "HELLO"
$lower = strtolower("HELLO"); // "hello"
$ucfirst = ucfirst("hello"); // "Hello"
$ucwords = ucwords("hello world"); // "Hello World"
<?php
// 字符串长度
$string = "Hello, PHP!";
echo "字符串长度: " . strlen($string) . "\n";
// 字符串查找
$pos = strpos($string, "PHP");
echo "PHP 的位置: " . $pos . "\n";
// 字符串替换
$replaced = str_replace("PHP", "World", $string);
echo "替换后的字符串: " . $replaced . "\n";
// 字符串截取
$substring = substr($string, 0, 5);
echo "截取的字符串: " . $substring . "\n";
// 字符串分割
$fruits = "苹果,香蕉,橙子";
$fruitArray = explode(",", $fruits);
echo "分割后的数组: " . implode(", ", $fruitArray) . "\n";
// 字符串格式化
$formatted = sprintf("姓名: %s, 年龄: %d", "张三", 25);
echo "格式化字符串: " . $formatted . "\n";
// 大小写转换
$lower = strtolower("HELLO");
$upper = strtoupper("hello");
echo "小写: " . $lower . ", 大写: " . $upper . "\n";
?>
// 定义类
class Person {
// 属性
public $name;
public $age;
// 构造函数
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
// 方法
public function greet() {
return "Hello, my name is " . $this->name . ".";
}
// 析构函数
public function __destruct() {
echo "对象被销毁\n";
}
}
// 创建对象
$person = new Person("张三", 25);
echo $person->greet(); // 输出:Hello, my name is 张三.
// 访问修饰符
class Person {
public $name; // 公共属性
private $age; // 私有属性
protected $gender; // 受保护属性
public function __construct($name, $age, $gender) {
$this->name = $name;
$this->age = $age;
$this->gender = $gender;
}
// 公共方法
public function getAge() {
return $this->age;
}
// 私有方法
private function formatName() {
return strtoupper($this->name);
}
}
// 访问属性
$person = new Person("张三", 25, "男");
echo $person->name; // 可以访问
// echo $person->age; // 错误:私有属性不可访问
echo $person->getAge(); // 通过方法访问私有属性
// 父类
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function makeSound() {
return "Some sound";
}
}
// 子类
class Dog extends Animal {
public $breed;
public function __construct($name, $breed) {
parent::__construct($name);
$this->breed = $breed;
}
// 重写方法
public function makeSound() {
return "Woof! Woof!";
}
// 新方法
public function fetch() {
return $this->name . " is fetching.";
}
}
$dog = new Dog("Buddy", "Golden Retriever");
echo $dog->makeSound(); // 输出:Woof! Woof!
echo $dog->fetch(); // 输出:Buddy is fetching.
// 定义接口
interface Shape {
public function getArea();
public function getPerimeter();
}
// 实现接口
class Circle implements Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function getArea() {
return pi() * $this->radius * $this->radius;
}
public function getPerimeter() {
return 2 * pi() * $this->radius;
}
}
class Rectangle implements Shape {
private $width;
private $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
public function getArea() {
return $this->width * $this->height;
}
public function getPerimeter() {
return 2 * ($this->width + $this->height);
}
}
// 抽象类
abstract class Shape {
abstract public function getArea();
public function getPerimeter() {
return 0;
}
}
class Circle extends Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function getArea() {
return pi() * $this->radius * $this->radius;
}
public function getPerimeter() {
return 2 * pi() * $this->radius;
}
}
// 定义 Trait
trait Loggable {
public function log($message) {
echo "LOG: " . $message . "\n";
}
}
// 使用 Trait
class User {
use Loggable;
public function doSomething() {
$this->log("Doing something");
}
}
$user = new User();
$user->doSomething(); // 输出:LOG: Doing something
<?php
// 定义类
class Person {
public $name;
private $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function greet() {
return "Hello, my name is " . $this->name . ".";
}
public function getAge() {
return $this->age;
}
}
// 创建对象
$person = new Person("张三", 25);
echo $person->greet() . "\n";
echo "年龄: " . $person->getAge() . "\n";
// 继承
class Employee extends Person {
private $employeeId;
public function __construct($name, $age, $employeeId) {
parent::__construct($name, $age);
$this->employeeId = $employeeId;
}
public function getEmployeeId() {
return $this->employeeId;
}
}
$employee = new Employee("李四", 30, "EMP001");
echo $employee->greet() . "\n";
echo "员工ID: " . $employee->getEmployeeId() . "\n";
// Trait
trait Loggable {
public function log($message) {
echo "LOG: " . $message . "\n";
}
}
class User {
use Loggable;
public function doSomething() {
$this->log("Doing something");
}
}
$user = new User();
$user->doSomething();
?>
// 使用 mysqli 连接 MySQL
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
// 使用 PDO 连接数据库
try {
$pdo = new PDO(
"mysql:host=localhost;dbname=database",
"username",
"password",
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
} catch (PDOException $e) {
die("连接失败: " . $e->getMessage());
}
// 使用 mysqli 查询数据
$sql = "SELECT * FROM users";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "\n";
}
}
// 使用 PDO 查询数据
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Name: " . $user["name"] . "\n";
// 使用 mysqli 插入数据
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $name, $email);
$name = "张三";
$email = "zhangsan@example.com";
$stmt->execute();
echo "新记录插入成功,ID: " . $stmt->insert_id;
// 使用 PDO 插入数据
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(["张三", "zhangsan@example.com"]);
echo "新记录插入成功,ID: " . $pdo->lastInsertId();
// 使用 mysqli 更新数据
$sql = "UPDATE users SET email = ? WHERE id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("si", $email, $id);
$email = "newemail@example.com";
$id = 1;
$stmt->execute();
echo "记录更新成功";
// 使用 PDO 更新数据
$stmt = $pdo->prepare("UPDATE users SET email = ? WHERE id = ?");
$stmt->execute(["newemail@example.com", 1]);
echo "记录更新成功";
// 使用 mysqli 删除数据
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("i", $id);
$id = 1;
$stmt->execute();
echo "记录删除成功";
// 使用 PDO 删除数据
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([1]);
echo "记录删除成功";
<?php
// 使用 PDO 连接数据库
try {
$pdo = new PDO(
"mysql:host=localhost;dbname=test",
"root",
"",
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo "数据库连接成功\n";
// 创建表
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
$pdo->exec($sql);
echo "表创建成功\n";
// 插入数据
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(["张三", "zhangsan@example.com"]);
echo "数据插入成功,ID: " . $pdo->lastInsertId() . "\n";
// 查询数据
$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "用户列表:\n";
foreach ($users as $user) {
echo "ID: " . $user["id"] . ", Name: " . $user["name"] . "\n";
}
} catch (PDOException $e) {
echo "错误: " . $e->getMessage();
}
?>
// 读取整个文件
$content = file_get_contents("test.txt");
echo $content;
// 读取文件为数组
$lines = file("test.txt");
foreach ($lines as $line) {
echo $line;
}
// 逐行读取文件
$handle = fopen("test.txt", "r");
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
// 写入文件
file_put_contents("test.txt", "Hello, PHP!");
// 追加内容
file_put_contents("test.txt", "Hello, PHP!", FILE_APPEND);
// 使用文件句柄写入
$handle = fopen("test.txt", "w");
fwrite($handle, "Hello, PHP!");
fclose($handle);
// 检查文件是否存在
if (file_exists("test.txt")) {
echo "文件存在\n";
}
// 获取文件大小
$size = filesize("test.txt");
echo "文件大小: " . $size . " 字节\n";
// 获取文件修改时间
$time = filemtime("test.txt");
echo "修改时间: " . date("Y-m-d H:i:s", $time) . "\n";
// 检查是否为文件
if (is_file("test.txt")) {
echo "这是一个文件\n";
}
// 检查是否为目录
if (is_dir("test")) {
echo "这是一个目录\n";
}
// 创建目录
mkdir("test", 0777, true);
// 删除目录
rmdir("test");
// 读取目录
$files = scandir("test");
foreach ($files as $file) {
echo $file . "\n";
}
// 遍历目录
$iterator = new RecursiveDirectoryIterator("test");
foreach ($iterator as $fileinfo) {
echo $fileinfo->getFilename() . "\n";
}
<?php
// 写入文件
$filename = "test.txt";
$content = "Hello, PHP!\n这是测试文件。";
file_put_contents($filename, $content);
echo "文件写入成功\n";
// 读取文件
if (file_exists($filename)) {
$readContent = file_get_contents($filename);
echo "文件内容:\n" . $readContent . "\n";
// 获取文件信息
echo "文件大小: " . filesize($filename) . " 字节\n";
echo "修改时间: " . date("Y-m-d H:i:s", filemtime($filename)) . "\n";
}
// 逐行读取文件
echo "逐行读取:\n";
$handle = fopen($filename, "r");
while (($line = fgets($handle)) !== false) {
echo trim($line) . "\n";
}
fclose($handle);
// 删除文件
if (file_exists($filename)) {
unlink($filename);
echo "文件删除成功\n";
}
?>
<?php
// 用户管理系统
class User {
private $id;
private $name;
private $email;
private $createdAt;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
$this->createdAt = date('Y-m-d H:i:s');
}
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function getEmail() {
return $this->email;
}
public function setName($name) {
$this->name = $name;
}
public function setEmail($email) {
$this->email = $email;
}
public function toArray() {
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->createdAt
];
}
}
class UserService {
private $users = [];
private $nextId = 1;
public function createUser($name, $email) {
$user = new User($name, $email);
$user->setId($this->nextId++);
$this->users[] = $user;
return $user;
}
public function getUserById($id) {
foreach ($this->users as $user) {
if ($user->getId() === $id) {
return $user;
}
}
return null;
}
public function getAllUsers() {
return $this->users;
}
public function updateUser($id, $name, $email) {
$user = $this->getUserById($id);
if ($user) {
$user->setName($name);
$user->setEmail($email);
return true;
}
return false;
}
public function deleteUser($id) {
foreach ($this->users as $key => $user) {
if ($user->getId() === $id) {
unset($this->users[$key]);
return true;
}
}
return false;
}
}
// 使用用户服务
$userService = new UserService();
// 创建用户
$user1 = $userService->createUser("张三", "zhangsan@example.com");
$user2 = $userService->createUser("李四", "lisi@example.com");
echo "用户创建成功:\n";
echo "ID: " . $user1->getId() . ", Name: " . $user1->getName() . "\n";
echo "ID: " . $user2->getId() . ", Name: " . $user2->getName() . "\n";
// 获取所有用户
echo "\n所有用户:\n";
$users = $userService->getAllUsers();
foreach ($users as $user) {
echo "ID: " . $user->getId() . ", Name: " . $user->getName() .
", Email: " . $user->getEmail() . "\n";
}
// 更新用户
$userService->updateUser(1, "张三(更新)", "newemail@example.com");
echo "\n用户更新成功\n";
// 删除用户
$userService->deleteUser(2);
echo "用户删除成功\n";
// 获取剩余用户
echo "\n剩余用户:\n";
$users = $userService->getAllUsers();
foreach ($users as $user) {
echo "ID: " . $user->getId() . ", Name: " . $user->getName() . "\n";
}
?>
本指南涵盖了 PHP 的核心概念和技术,包括:
通过本指南的学习,您应该能够掌握 PHP 的基本语法和核心特性,为后端开发打下坚实的基础。
PHP 是一种强大而灵活的服务器端脚本语言,它拥有丰富的功能和庞大的社区支持。随着 PHP 8 的发布,PHP 引入了许多新特性和性能改进,使得它更加现代化和高效。无论是构建简单的网站还是复杂的企业应用,PHP 都是一个优秀的选择。