13 KiB
13 KiB
PHP快速学习路径(针对有经验的开发者)
基于你已有的Android、Python后端、前端开发经验,快速掌握PHP
一、快速对比学习(1-2天)
1. 语法对比速查
变量和数据类型
// PHP - 弱类型,变量以$开头
$name = "PHP";
$age = 25;
$price = 99.99;
$isActive = true;
// 对比:Java/Kotlin(强类型)
// String name = "Java";
// int age = 25;
// 对比:Python(弱类型,无$)
// name = "Python"
// age = 25
数组操作
// 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
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类定义(类似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)
// $_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字符串函数(类似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方法)
$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的数据库操作)
// 连接数据库(类似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处理(你已熟悉,直接上手)
// 处理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)
// 启动会话
session_start();
// 设置会话数据
$_SESSION['user_id'] = 123;
$_SESSION['username'] = 'admin';
// 获取会话数据
$userId = $_SESSION['user_id'] ?? null;
// 销毁会话
session_destroy();
3. 文件上传(类似Android的文件选择)
// 处理文件上传
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
快速对比
// 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())
// 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
// 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应用
// 后端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]);
}
// 前端调用(你已熟悉)
fetch('/api/users')
.then(res => res.json())
.then(users => {
// 显示用户列表
});
项目3:微信小程序后端(5-7天)
目标:利用你的小程序经验,用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项目
八、推荐学习资源
快速入门
-
PHP官方文档:https://www.php.net/manual/zh/
- 直接看函数参考,按需查阅
-
菜鸟教程PHP:https://www.runoob.com/php/php-tutorial.html
- 快速浏览语法部分
-
Laravel文档:https://laravel.com/docs
- 直接看快速开始,边做边学
实战项目
- GitHub搜索:搜索"php api"、"php crud"等关键词
- Laravel项目模板:使用Laravel的starter项目
- 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周:语法学习 + 简单项目(利用已有知识快速迁移)
- 第2周:框架学习 + 完整项目(利用Django/Flask经验)
- 第3周:实战应用 + 优化(结合你的实际需求)
关键建议:
- 不要从头学基础,直接对比学习
- 边学边做,实战驱动
- 利用已有知识,快速迁移
- 重点学习PHP特有内容
- 框架选择Laravel(类似Django,容易上手)
祝你学习顺利! 🚀