Files
mkdocs/docs/学习笔记/php/PHP快速学习路径.md
2026-01-30 10:45:19 +08:00

506 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PHP快速学习路径针对有经验的开发者
> 基于你已有的Android、Python后端、前端开发经验快速掌握PHP
---
## 一、快速对比学习1-2天
### 1. 语法对比速查
#### 变量和数据类型
```php
// PHP - 弱类型,变量以$开头
$name = "PHP";
$age = 25;
$price = 99.99;
$isActive = true;
// 对比Java/Kotlin强类型
// String name = "Java";
// int age = 25;
// 对比Python弱类型无$
// name = "Python"
// age = 25
```
#### 数组操作
```php
// PHP数组类似Python的list和dict混合
$arr = [1, 2, 3]; // 索引数组
$arr = ['name' => 'PHP', 'age' => 25]; // 关联数组类似Python dict
// 对比Java
// List<Integer> list = Arrays.asList(1, 2, 3);
// Map<String, Object> map = new HashMap<>();
// 对比Python
// arr = [1, 2, 3]
// arr = {'name': 'Python', 'age': 25}
```
#### 函数定义
```php
// PHP
function add($a, $b) {
return $a + $b;
}
// 对比Java
// public int add(int a, int b) { return a + b; }
// 对比Python
// def add(a, b): return a + b
```
### 2. 面向对象对比
```php
// PHP类定义类似Java/Python
class User {
private $name;
private $age;
public function __construct($name, $age) { // 构造函数
$this->name = $name;
$this->age = $age;
}
public function getName() {
return $this->name;
}
}
// 对比Java
// public class User {
// private String name;
// public User(String name) { this.name = name; }
// }
// 对比Python
// class User:
// def __init__(self, name):
// self.name = name
```
**关键差异:**
- PHP使用`$this`访问实例属性类似Java的this
- 构造函数名是`__construct`类似Python的`__init__`
- 访问修饰符:`public``private``protected`与Java相同
---
## 二、核心差异快速掌握2-3天
### 1. PHP特有语法
#### 超全局变量类似Android的Intent、Python的request
```php
// $_GET - 获取URL参数类似Android的Intent.getExtra()
$id = $_GET['id'];
// $_POST - 获取POST数据类似Android的Intent.getExtra()
$name = $_POST['name'];
// $_SESSION - 会话数据类似Android的SharedPreferences
$_SESSION['user_id'] = 123;
$userId = $_SESSION['user_id'];
// $_COOKIE - Cookie数据
$token = $_COOKIE['token'];
// $_SERVER - 服务器信息
$method = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];
```
#### 字符串处理
```php
// PHP字符串函数类似Python的字符串方法
$str = "Hello World";
$length = strlen($str); // 长度
$upper = strtoupper($str); // 转大写
$lower = strtolower($str); // 转小写
$pos = strpos($str, "World"); // 查找位置
$newStr = str_replace("World", "PHP", $str); // 替换
// 对比Python
// str.upper()
// str.lower()
// str.find()
// str.replace()
```
#### 数组函数类似Python的list方法
```php
$arr = [1, 2, 3, 4, 5];
// 常用数组函数
count($arr); // 长度类似len()
array_push($arr, 6); // 添加元素类似append()
array_pop($arr); // 移除最后一个
array_shift($arr); // 移除第一个
in_array(3, $arr); // 检查是否存在类似in
array_map(function($x) { return $x * 2; }, $arr); // 映射类似map()
array_filter($arr, function($x) { return $x > 2; }); // 过滤类似filter()
```
### 2. 数据库操作(你已熟悉,快速对比)
#### PDO使用类似Python的数据库操作
```php
// 连接数据库类似Python的pymysql/sqlite3
$pdo = new PDO("mysql:host=localhost;dbname=test", $user, $pass);
// 查询类似Python的cursor.execute()
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// 插入类似Python的execute + commit
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);
// 对比Python
// cursor.execute("SELECT * FROM users WHERE id = %s", (id,))
// user = cursor.fetchone()
```
---
## 三、Web开发快速上手3-5天
### 1. HTTP处理你已熟悉直接上手
```php
// 处理GET请求
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$id = $_GET['id'] ?? null; // ?? 是null合并运算符类似Python的or
// 处理逻辑
}
// 处理POST请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
// 处理逻辑
}
// 返回JSON类似Python的jsonify
header('Content-Type: application/json');
echo json_encode(['status' => 'success', 'data' => $result]);
```
### 2. 会话管理类似Android的SharedPreferences
```php
// 启动会话
session_start();
// 设置会话数据
$_SESSION['user_id'] = 123;
$_SESSION['username'] = 'admin';
// 获取会话数据
$userId = $_SESSION['user_id'] ?? null;
// 销毁会话
session_destroy();
```
### 3. 文件上传类似Android的文件选择
```php
// 处理文件上传
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
$tmpName = $_FILES['file']['tmp_name'];
$fileName = $_FILES['file']['name'];
$targetPath = 'uploads/' . $fileName;
move_uploaded_file($tmpName, $targetPath);
}
```
---
## 四、框架快速入门1周
### 推荐Laravel类似Django/Flask
#### 为什么选择Laravel
- **路由系统**类似Flask的装饰器路由
- **ORM**类似Django的Model
- **中间件**类似Django的Middleware
- **模板引擎**类似Django的Template
#### 快速对比
```php
// Laravel路由类似Flask
Route::get('/users', function() {
return User::all();
});
Route::post('/users', function(Request $request) {
return User::create($request->all());
});
// 对比Flask
// @app.route('/users', methods=['GET'])
// def get_users():
// return jsonify(User.query.all())
```
```php
// Laravel Model类似Django Model
class User extends Model {
protected $fillable = ['name', 'email'];
}
// 使用类似Django ORM
User::create(['name' => 'John', 'email' => 'john@example.com']);
User::where('id', 1)->first();
User::where('age', '>', 18)->get();
// 对比Django
// class User(models.Model):
// name = models.CharField(max_length=100)
// User.objects.create(name='John')
// User.objects.filter(age__gt=18)
```
---
## 五、实战项目快速搭建1-2周
### 项目1简单API服务2-3天
**目标**利用你的Python后端经验快速搭建一个PHP API
```php
// api.php - 简单API实现
header('Content-Type: application/json');
$method = $_SERVER['REQUEST_METHOD'];
$path = $_SERVER['REQUEST_URI'];
switch ($method) {
case 'GET':
if ($path === '/api/users') {
// 查询用户列表
$users = getUsers();
echo json_encode($users);
}
break;
case 'POST':
if ($path === '/api/users') {
// 创建用户
$data = json_decode(file_get_contents('php://input'), true);
$user = createUser($data);
echo json_encode($user);
}
break;
}
```
### 项目2结合前端3-5天
**目标**利用你的前端经验做一个完整的CRUD应用
```php
// 后端API类似你Python写的接口
// users.php
$pdo = new PDO("mysql:host=localhost;dbname=test", $user, $pass);
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($users);
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$data['name'], $data['email']]);
echo json_encode(['success' => true]);
}
```
```javascript
// 前端调用(你已熟悉)
fetch('/api/users')
.then(res => res.json())
.then(users => {
// 显示用户列表
});
```
### 项目3微信小程序后端5-7天
**目标**利用你的小程序经验用PHP做小程序后端
```php
// 小程序登录接口类似你Python写的
// login.php
$code = $_POST['code']; // 微信登录code
// 调用微信API获取openid
$url = "https://api.weixin.qq.com/sns/jscode2session";
$params = [
'appid' => $appId,
'secret' => $appSecret,
'js_code' => $code,
'grant_type' => 'authorization_code'
];
$response = file_get_contents($url . '?' . http_build_query($params));
$data = json_decode($response, true);
// 保存用户信息
$openid = $data['openid'];
saveUser($openid);
echo json_encode(['openid' => $openid]);
```
---
## 六、学习时间规划
### 第1周基础语法 + 简单项目
- **Day 1-2**:语法对比学习,完成基础练习
- **Day 3-4**数据库操作完成CRUD练习
- **Day 5-7**完成一个简单API项目
### 第2周框架学习 + 实战项目
- **Day 1-3**Laravel基础路由、模型、控制器
- **Day 4-5**完成Laravel项目
- **Day 6-7**:优化和部署
### 第3周进阶 + 实际应用
- **Day 1-3**深入学习Laravel高级特性
- **Day 4-5**:完成微信小程序后端
- **Day 6-7**:性能优化和安全加固
---
## 七、快速学习技巧
### 1. 利用已有知识迁移
- **面向对象**PHP的OOP与Java/Python类似直接迁移
- **数据库操作**PDO与Python的数据库操作类似
- **HTTP处理**与Android的HTTP请求、Python的Flask/Django类似
- **前端交互**:你已熟悉,直接上手
### 2. 重点学习PHP特有内容
- **超全局变量**`$_GET``$_POST``$_SESSION`
- **数组函数**PHP的数组函数非常丰富
- **命名空间**类似Java的package
- **Composer**PHP的包管理工具类似Python的pip
### 3. 跳过不紧急的内容
- **基础语法细节**:你已经理解编程概念,快速浏览即可
- **底层原理**:先会用,再深入
- **不常用的特性**:按需学习
### 4. 实战驱动学习
- **边学边做**:不要只看文档,直接写代码
- **改造现有项目**把Python项目改成PHP版本
- **参考开源项目**看GitHub上的PHP项目
---
## 八、推荐学习资源
### 快速入门
1. **PHP官方文档**https://www.php.net/manual/zh/
- 直接看函数参考,按需查阅
2. **菜鸟教程PHP**https://www.runoob.com/php/php-tutorial.html
- 快速浏览语法部分
3. **Laravel文档**https://laravel.com/docs
- 直接看快速开始,边做边学
### 实战项目
1. **GitHub搜索**:搜索"php api"、"php crud"等关键词
2. **Laravel项目模板**使用Laravel的starter项目
3. **PHP实战教程**:找一些完整的项目教程
---
## 九、常见问题快速解决
### Q1: PHP与Python的主要区别
**A:**
- PHP主要用于Web开发Python更通用
- PHP是弱类型Python也是弱类型你已经习惯
- PHP的数组功能强大类似Python的list+dict
- PHP的语法更接近C/JavaPython更简洁
### Q2: 如何快速上手Laravel
**A:**
- 如果你熟悉DjangoLaravel会很容易
- 路由系统类似Flask
- ORM类似Django的Model
- 直接看Laravel的快速开始跟着做一遍
### Q3: PHP的性能如何
**A:**
- PHP 7+性能很好接近Java
- 使用OPcache可以进一步提升性能
- 对于Web应用性能足够
### Q4: 需要学习哪些PHP特性
**A:**
- **必须掌握**:基础语法、数组操作、数据库操作、会话管理
- **建议掌握**面向对象、命名空间、Composer、框架使用
- **可选学习**:底层原理、扩展开发
---
## 十、学习检查清单
### 基础语法1-2天
- [ ] 变量和数据类型
- [ ] 数组操作
- [ ] 函数定义
- [ ] 面向对象基础
### Web开发2-3天
- [ ] HTTP请求处理
- [ ] 数据库操作PDO
- [ ] 会话管理
- [ ] 文件上传
### 框架使用3-5天
- [ ] Laravel安装和配置
- [ ] 路由系统
- [ ] 模型和数据库
- [ ] 控制器和视图
### 实战项目1-2周
- [ ] 完成一个API项目
- [ ] 完成一个Web应用
- [ ] 完成一个小程序后端
---
## 总结
基于你的经验背景,**预计2-3周可以基本掌握PHP**
1. **第1周**:语法学习 + 简单项目(利用已有知识快速迁移)
2. **第2周**:框架学习 + 完整项目利用Django/Flask经验
3. **第3周**:实战应用 + 优化(结合你的实际需求)
**关键建议:**
- 不要从头学基础,直接对比学习
- 边学边做,实战驱动
- 利用已有知识,快速迁移
- 重点学习PHP特有内容
- 框架选择Laravel类似Django容易上手
**祝你学习顺利!** 🚀