PHP入门指南

文章目录

  • 前言
      • [第一步:PHP 语法速查(1-2小时)](#第一步:PHP 语法速查(1-2小时))
      • [第二步:ThinkPHP 5.1 核心映射(2小时)](#第二步:ThinkPHP 5.1 核心映射(2小时))
      • 第三步:直接读项目核心代码(3小时)
        • [1. 入口文件(5分钟)](#1. 入口文件(5分钟))
        • [2. 基类(30分钟)--- 理解整个项目的骨架](#2. 基类(30分钟)— 理解整个项目的骨架)
        • [3. 一个完整的CRUD(1小时)--- 掌握开发模式](#3. 一个完整的CRUD(1小时)— 掌握开发模式)
        • [4. API接口(1小时)--- 理解对外接口设计](#4. API接口(1小时)— 理解对外接口设计)
        • [5. 后台命令(30分钟)--- 理解异步处理](#5. 后台命令(30分钟)— 理解异步处理)
      • 第四步:动手实践(2小时)
      • [第五步:PHP 生态速查(30分钟)](#第五步:PHP 生态速查(30分钟))
    • [🎯 关键差异提醒](#🎯 关键差异提醒)
      • [1. PHP 是同步阻塞的](#1. PHP 是同步阻塞的)
      • [2. PHP 没有常驻内存](#2. PHP 没有常驻内存)
      • [3. ThinkPHP 的 Facade 模式](#3. ThinkPHP 的 Facade 模式)
      • [4. 模板引擎语法](#4. 模板引擎语法)
    • [📋 速查清单](#📋 速查清单)

前言


第一步:PHP 语法速查(1-2小时)

你只需要知道 PHP 和你熟悉的语言的差异点

概念 Java/JS/Python PHP
变量 name = "xxx" $name = "xxx"
字符串拼接 "a" + "b" "a" . "b"
数组 [1,2,3]{k:v} 统一用 [],索引和关联都是数组
方法调用 obj.method() $obj->method()
静态方法 Class.method() Class::method()
命名空间 import com.xxx use app\admin\controller
构造函数 constructor() __construct()
访问修饰符 private/protected/public 一样
继承 extends 一样
三元运算 a ? b : c 一样,还有 ?? (null合并)

PHP 独有特性:

php 复制代码
// 1. $this → 当前对象
$this->db->table('user')->find();

// 2. :: → 静态调用
Cache::store('redis')->get('key');

// 3. -> → 对象调用
$user = new UserModel();
$user->getList();

// 4. 数组操作
$arr = ['name' => 'Tom', 'age' => 25];
$arr['name'];  // Tom

// 5. 魔术方法
__construct()   // 构造
__get()         // 属性访问
__call()        // 方法调用

第二步:ThinkPHP 5.1 核心映射(2小时)

把 ThinkPHP 映射到你已知的框架概念:

概念 Spring Boot Express/Koa ThinkPHP 5.1
路由 @RequestMapping app.get('/path') route/route.php 或 自动路由
控制器 @Controller router.handler class Xxx extends Controller
模型 @Entity Mongoose Model class Xxx extends Model
中间件 @Filter app.use(middleware) 中间件类
配置 application.yml config.js config/*.php
模板引擎 Thymeleaf EJS/Pug ThinkPHP Template
ORM JPA/Hibernate Mongoose Db类 / Model类

ThinkPHP 的核心约定:

复制代码
URL: /模块/控制器/方法
     /admin/user/lists
      ↓      ↓     ↓
    admin  User  lists()

文件位置: application/admin/controller/User.php
视图位置: application/admin/view/user/lists.html

第三步:直接读项目核心代码(3小时)

按这个顺序读,效率最高:

1. 入口文件(5分钟)
复制代码
public/index.php → thinkphp/base.php → App::run()
2. 基类(30分钟)--- 理解整个项目的骨架
复制代码
admin/controller/Parents.php   → 登录验证(Cookie+Redis)
api/controller/Init.php        → API基类(签名+加密+返回格式)
3. 一个完整的CRUD(1小时)--- 掌握开发模式
复制代码
admin/controller/Admin.php     → 控制器
admin/model/AdminModel.php     → 模型
admin/view/admin/lists.html    → 视图
admin/config/database.php      → 配置
4. API接口(1小时)--- 理解对外接口设计
复制代码
api/controller/Pay.php         → 支付流程
api/controller/User.php        → 用户接口
5. 后台命令(30分钟)--- 理解异步处理
复制代码
common/command/Chat.php        → Redis发布订阅
common/command/Onlinenum.php   → 在线人数

第四步:动手实践(2小时)

直接在这个项目上写一个模块,最快的掌握方式:

创建一个 demo 模块,包含完整 CRUD:

复制代码
application/demo/
├── controller/
│   └── Article.php     ← 控制器
├── model/
│   └── Article.php     ← 模型
├── view/
│   └── article/
│       ├── lists.html  ← 列表页
│       ├── add.html    ← 添加页
│       └── edit.html   ← 编辑页
└── config/
    ├── database.php    ← 数据库配置
    ├── cache.php       ← 缓存配置
    └── app.php         ← 应用配置

第五步:PHP 生态速查(30分钟)

工具 作用 类比
Composer 包管理 npm / Maven / pip
composer.json 依赖声明 package.json / pom.xml
vendor/ 依赖目录 node_modules/
phpunit 单元测试 Jest / JUnit
php think CLI工具 npm run / artisan

🎯 关键差异提醒

1. PHP 是同步阻塞的

php 复制代码
// PHP: 一个请求一个进程,执行完就释放
// 不像 Node.js 的事件循环
// 不像 Go 的协程
// 所以需要 Redis 发布订阅来做"异步"

2. PHP 没有常驻内存

php 复制代码
// 每次请求都是全新的
// 变量不会跨请求保留
// 所以需要 Redis/Cache 来存储状态
// 这就是为什么登录状态要存 Redis

3. ThinkPHP 的 Facade 模式

php 复制代码
// 看起来像静态调用,实际是代理
Cache::get('key');       // 看似静态方法
Db::table('user');      // 看似静态方法

// 实际底层是:
// Cache → think\facade\Cache → 容器中取出 Cache 实例 → 调用实例方法
// 类似 Java 的依赖注入 + 静态代理

4. 模板引擎语法

html 复制代码
<!-- 输出变量 -->
{$username}

<!-- 循环 -->
{foreach $list as $item}
    {$item.name}
{/foreach}

<!-- 条件 -->
{if $status == 1}
    启用
{else/}
    禁用
{/if}

<!-- 引入公共模板 -->
{include file="public/head" /}

📋 速查清单

复制代码
✅ PHP语法       → 变量$  对象->  静态::  拼接.
✅ ThinkPHP路由   → /模块/控制器/方法
✅ 控制器        → extends Controller, fetch()渲染, assign()传参
✅ 模型          → extends Model, 链式查询
✅ 视图          → {$var}, {foreach}, {if}
✅ 配置          → Config::get(), 多层覆盖
✅ 缓存          → Cache::store('redis')
✅ 数据库        → Db::table()->where()->find()
✅ 请求          → input(), Request::post()
✅ 命令行        → php think xxx, extends Command
✅ Facade        → 静态代理模式
✅ Cookie/Session → Cookie::set/get, Session::set/get

相关推荐
lolo大魔王2 小时前
Go语言的循环语句、判断语句、通道选择语句
开发语言·算法·golang
551只玄猫4 小时前
【数学建模 matlab 实验报告12】聚类分析和判别分析
开发语言·数学建模·matlab·课程设计·聚类·实验报告
小陈工5 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey6 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
lly20240610 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨10 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn99910 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏49410 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n10 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos