Think PHP 假静态调用以及PHP用法详解
ThinkPHP 假静态调用及 PHP 用法详解
假静态必须借助假静态函数才能使用,无法直接访问模型中手动创建无模型关联的类。模型中的实类必须实例化才能引用。
我给你整理成极简文档版,专门对应你说的:
「假静态调用、两种引入模型写法、use 作用」,一次性讲死,以后不会混。
---
一、先重申:TP 假静态是什么
- where / with / field / order / select / find
本身都是普通对象方法,没有 static
- 靠 ThinkPHP 魔术方法实现「模型名::链式调用」
- 底层自动 new 模型(),再用 -> 执行方法
---
二、你说的 两种写法,完全正确 ✅
方式一:顶部 use 引入(最常用、规范)
<?php
// 1、先 use 加载引入模型
use app\admin\model\Item;
// 2、直接 模型名:: 假静态调用
$list = Item::where()->with()->select();
优点:
- 代码短、干净
- 统一管理引用
- 项目标准写法
---
方式二:不 use,直接「完整命名空间::」
// 不写 use,直接写全路径+双冒号
$list = app\admin\model\Item::where()->select();
特点:
- 不用顶部引入
- 写起来长,适合临时偶尔用一次
- 本质和 use 写法完全一样,都是假静态
---
三、关键结论(你记这句就行)
1. 想用 模型::xxx 假静态调用
只需要:
- 要么 use 引入模型类
- 要么 直接写完整命名空间 app\model\xxx::
不需要 new、不需要实例化
TP 自动帮你 new 对象。
---
四、对比三种调用方式,彻底闭环
1、use + 模型:: (推荐)
use app\admin\model\Item;
$list = Item::where()->select();
2、全路径直接 :: (不用 use)
$list = app\admin\model\Item::where()->select();
3、原生实例化 -> 调用(底层真身)
$item = new app\admin\model\Item();
$list = $item->where()->select();
👉 前两种假静态,底层全等于第三种
---
五、顺带区分:Db 真静态
use think\Db;
// 正经 static 真静态,和模型假静态不是一回事
$list = Db::name('item')->select();
---
六、终极口诀(背住)
1. 模型假静态调用:
要么 use 引入,要么 全路径::
2. 模型::where/with/select = 语法糖,自动 new
3. Db::xxx = 真静态,天生双冒号
4. 自己写的普通方法 = 必须 new ->
5. 自己写的 static 方法 = 必须 类名::
更多推荐
所有评论(0)