506 lines
13 KiB
Markdown
506 lines
13 KiB
Markdown
# 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/Java,Python更简洁
|
||
|
||
### Q2: 如何快速上手Laravel?
|
||
**A:**
|
||
- 如果你熟悉Django,Laravel会很容易
|
||
- 路由系统类似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,容易上手)
|
||
|
||
**祝你学习顺利!** 🚀
|