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 方法 = 必须 类名::

 

 

 

更多推荐