## 容å¨åä¾èµæ³¨å
¥
ThinkPHP使ç¨å®¹å¨æ¥æ´æ¹ä¾¿ç管çç±»ä¾èµåè¿è¡ä¾èµæ³¨å
¥ï¼æ°çç容å¨æ¯æ`PSR-11`è§èã
>[danger] 容å¨ç±»çå·¥ä½ç±`think\Container`ç±»å®æï¼ä½å¤§å¤æ°æ
åµæ们åªéè¦éè¿`app`å©æå½æ°æè
`think\App`ç±»å³å¯å®¹å¨æä½ï¼å¦æå¨æå¡ç±»ä¸å¯ä»¥ç´æ¥è°ç¨`this->app`è¿è¡å®¹å¨æä½ã
ä¾èµæ³¨å
¥å
¶å®æ¬è´¨ä¸æ¯æ对类çä¾èµéè¿æé å¨å®æèªå¨æ³¨å
¥ï¼ä¾å¦å¨æ§å¶å¨æ¶ææ¹æ³åæä½æ¹æ³ä¸ä¸æ¦å¯¹åæ°è¿è¡å¯¹è±¡ç±»å约æåä¼èªå¨è§¦åä¾èµæ³¨å
¥ï¼ç±äºè®¿é®æ§å¶å¨çåæ°é½æ¥èªäºURL请æ±ï¼æ®éåéå°±æ¯éè¿åæ°ç»å®èªå¨è·åï¼å¯¹è±¡åéåæ¯éè¿ä¾èµæ³¨å
¥çæã
~~~
<?php
namespace app\controller;
use think\Request;
class Index
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function hello($name)
{
return 'Hello,' . $name . 'ï¼This is '. $this->request->action();
}
}
~~~
>[danger] ä¾èµæ³¨å
¥ç对象åæ°æ¯æå¤ä¸ªï¼å¹¶ä¸å顺åºæ å
³ã
æ¯æ使ç¨ä¾èµæ³¨å
¥çåºæ¯å
æ¬ï¼ä½ä¸éäºï¼ï¼
* æ§å¶å¨æ¶ææ¹æ³ï¼
* æ§å¶å¨æä½æ¹æ³ï¼
* è·¯ç±çéå
å®ä¹ï¼
* äºä»¶ç±»çæ§è¡æ¹æ³ï¼
* ä¸é´ä»¶çæ§è¡æ¹æ³ï¼
对äºèªå®ä¹ç类以åæ¹æ³ï¼å¦æéè¦ä½¿ç¨ä¾èµæ³¨å
¥ï¼éè¦ä½¿ç¨ç³»ç»æä¾ç`invoke`å©æå½æ°è°ç¨ï¼ä¾å¦ï¼
```
class Foo
{
public function __construct(Bar $bar)
{
}
}
```
å¦æç´æ¥`new`çè¯ï¼éè¦æå¨ä¼ å
¥`Bar`对象å®ä¾
```
$bar = new Bar();
$foo = new Foo($bar);
```
å¦æ使ç¨å®¹å¨æ¥å®ä¾åçè¯ï¼å¯ä»¥èªå¨è¿è¡ä¾èµæ³¨å
¥ã
```
$foo = invoke('Foo');
```
å¦æè¦å¯¹æ个æ¹æ³æ¯æä¾èµæ³¨å
¥ï¼å¯ä»¥ä½¿ç¨
```
class Foo
{
public function bar(Bar $bar)
{
// ...
}
}
```
```
$result = invoke(['Foo', 'bar']);
```
ä¹æ¯æ对æ个å½æ°æè
éå
使ç¨ä¾èµæ³¨å
¥
```
$result = invoke(function(Bar $bar) {
// ...
});
```
## ç»å®
ä¾èµæ³¨å
¥çç±»ç»ä¸ç±å®¹å¨è¿è¡ç®¡çï¼**大å¤æ°æ
åµä¸æ¯å¨èªå¨ç»å®å¹¶ä¸å®ä¾åç**ãä¸è¿ä½ å¯ä»¥éæ¶è¿è¡æå¨ç»å®ç±»å°å®¹å¨ä¸ï¼é常æ¯å¨æå¡ç±»ç`register`æ¹æ³ä¸è¿è¡ç»å®ï¼ï¼æ¯æå¤ç§ç»å®æ¹å¼ã
### ç»å®ç±»æ è¯
å¯ä»¥å¯¹å·²æçç±»åºç»å®ä¸ä¸ªæ è¯ï¼å¯ä¸ï¼ï¼ä¾¿äºå¿«éè°ç¨ã
~~~php
// ç»å®ç±»åºæ è¯
$this->app->bind('think\Cache', 'app\common\Cache');
~~~
æè
使ç¨å©æå½æ°
~~~php
// ç»å®ç±»åºæ è¯
bind('cache', 'think\Cache');
~~~
> ç»å®çç±»æ è¯å¯ä»¥èªå·±å®ä¹ï¼åªè¦ä¸å²çªï¼ã
### ç»å®éå
å¯ä»¥ç»å®ä¸ä¸ªéå
å°å®¹å¨ä¸
~~~
bind('sayHello', function ($name) {
return 'hello,' . $name;
});
~~~
### ç»å®å®ä¾
ä¹å¯ä»¥ç´æ¥ç»å®ä¸ä¸ªç±»çå®ä¾
~~~
$cache = new think\Cache;
// ç»å®ç±»å®ä¾
bind('cache', $cache);
~~~
### ç»å®è³æ¥å£å®ç°
对äºä¾èµæ³¨å
¥ä½¿ç¨æ¥å£ç±»çæ
åµï¼æ们éè¦åè¯ç³»ç»ä½¿ç¨åªä¸ªå
·ä½çæ¥å£å®ç°ç±»æ¥è¿è¡æ³¨å
¥ï¼è¿ä¸ªä½¿ç¨å¯ä»¥ææ个类ç»å®å°æ¥å£
~~~
// ç»å®think\LoggerInterfaceæ¥å£å®ç°å°think\Log
bind('think\LoggerInterface','think\Log');
~~~
使ç¨æ¥å£ä½ä¸ºä¾èµæ³¨å
¥çç±»å
~~~
<?php
namespace app\index\controller;
use think\LoggerInterface;
class Index
{
public function hello(LoggerInterface $log)
{
$log->record('hello,world!');
}
}
~~~
### æ¹éç»å®
å¨å®é
åºç¨å¼åè¿ç¨ï¼ä¸éè¦æå¨ç»å®ï¼æ们åªéè¦å¨`app`ç®å½ä¸é¢å®ä¹`provider.php`æ件ï¼åªè½å¨å
¨å±å®ä¹ï¼ä¸æ¯æåºç¨åç¬å®ä¹ï¼ï¼ç³»ç»ä¼èªå¨æ¹éç»å®ç±»åºå°å®¹å¨ä¸ã
~~~
return [
'route' => \think\Route::class,
'session' => \think\Session::class,
'url' => \think\Url::class,
];
~~~
>[danger] ç»å®æ è¯è°ç¨çæ¶ååºå大å°åï¼ç³»ç»å·²ç»å
ç½®ç»å®äºæ ¸å¿å¸¸ç¨ç±»åºï¼æ ééå¤ç»å®
ç³»ç»å
ç½®ç»å®å°å®¹å¨ä¸çç±»åºå
æ¬
| ç³»ç»ç±»åº | 容å¨ç»å®æ è¯ |
| --- | --- |
| think\\App | app |
| think\\Cache | cache |
| think\\Config | config |
| think\\Cookie | cookie |
| think\\Console | console |
| think\\Db | db |
| think\\Debug | debug |
| think\\Env | env |
| think\\Event | event |
| think\\Http | http |
| think\\Lang | lang |
| think\\Log | log |
| think\\Middleware | middleware |
| think\\Request | request |
| think\\Response | response |
| think\\Filesystem| filesystem |
| think\\Route | route |
| think\\Session | session |
| think\\Validate | validate |
| think\\View | view |
## 解æ
使ç¨`app`å©æå½æ°è¿è¡å®¹å¨ä¸ç类解æè°ç¨ï¼å¯¹äºå·²ç»ç»å®çç±»æ è¯ï¼ä¼èªå¨å¿«éå®ä¾å
~~~
$cache = app('cache');
~~~
带åæ°å®ä¾åè°ç¨
~~~
$cache = app('cache',['file']);
~~~
对äºæ²¡æç»å®çç±»ï¼ä¹å¯ä»¥ç´æ¥è§£æ
~~~
$arrayItem = app('org\utils\ArrayItem');
~~~
>[danger] è°ç¨åç»å®çæ è¯å¿
é¡»ä¿æä¸è´ï¼å
æ¬å¤§å°åï¼
容å¨ä¸å·²ç»è°ç¨è¿çç±»ä¼èªå¨ä½¿ç¨åä¾ï¼é¤éä½ ä½¿ç¨ä¸é¢çæ¹å¼å¼ºå¶éæ°å®ä¾åã
~~~
// æ¯æ¬¡è°ç¨é½ä¼éæ°å®ä¾å
$cache = app('cache', [], true);
~~~
## 对象åè°ç¨
使ç¨`app`å©æå½æ°è·å容å¨ä¸ç对象å®ä¾ï¼æ¯æä¾èµæ³¨å
¥ï¼ã
~~~
$app = app();
// å¤æ对象å®ä¾æ¯å¦åå¨
isset($app->cache);
// 注å容å¨å¯¹è±¡å®ä¾
$app->cache = think\Cache::class;
// è·å容å¨ä¸ç对象å®ä¾
$cache = $app->cache;
~~~
ä¹å°±æ¯è¯´ï¼ä½ å¯ä»¥å¨ä»»ä½å°æ¹ä½¿ç¨`app()`æ¹æ³è°ç¨å®¹å¨ä¸çä»»ä½ç±»ï¼ä½å¤§å¤æ°æ
åµä¸é¢ï¼æ们æ´å»ºè®®ä½¿ç¨ä¾èµæ³¨å
¥ã
~~~
// è°ç¨é
置类
app()->config->get('app_name');
// è°ç¨sessionç±»
app()->session->get('user_name');
~~~
## èªå¨æ³¨å
¥
容å¨ä¸»è¦ç¨äºä¾èµæ³¨å
¥ï¼ä¾èµæ³¨å
¥ä¼é¦å
æ£æ¥å®¹å¨ä¸æ¯å¦æ³¨åè¿è¯¥å¯¹è±¡å®ä¾ï¼å¦æ没æå°±ä¼èªå¨å®ä¾åï¼ç¶åèªå¨æ³¨å
¥ï¼ä¾å¦ï¼
æ们å¯ä»¥ç»è·¯ç±ç»å®æ¨¡å对象å®ä¾
~~~
Route::get('user/:id','index/Index/hello')
->model('\app\index\model\User');
~~~
ç¶åå¨æä½æ¹æ³ä¸èªå¨æ³¨å
¥User模å
~~~
<?php
namespace app\index\controller;
use app\index\model\User;
class Index
{
public function hello(User $user)
{
return 'Hello,'.$user->name;
}
}
~~~
## èªå®ä¹å®ä¾å
容å¨ä¸ç对象å®ä¾åæ¯æèªå®ä¹ï¼å¯ä»¥å¨ä½ éè¦ä¾èµæ³¨å
¥ç对象ä¸å¢å `__make`æ¹æ³å®ä¹ï¼ä¾å¦ï¼
å¦æä½ å¸æ`User`模åç±»å¨ä¾èµæ³¨å
¥çæ¶å 使ç¨èªå®ä¹å®ä¾åçæ¹å¼ï¼å¯ä»¥ç¨ä¸é¢çæ¹æ³ã
~~~
<?php
namespace app\index\model;
use think\Model;
use think\db\Query;
class User extends Model
{
public static function __make(Query $query)
{
return (new self())->setQuery($query);
}
}
~~~
## 容å¨å¯¹è±¡åè°æºå¶
容å¨ä¸ç对象å®ä¾åä¹åï¼æ¯æåè°æºå¶ï¼å©ç¨è¯¥æºå¶å¯ä»¥å®ç°è¯¸å¦æ³¨è§£åè½çç¸å
³åè½ã
ä½ å¯ä»¥éè¿`resolving`æ¹æ³æ³¨åä¸ä¸ªå
¨å±åè°
```
Container::getInstance()->resolving(function($instance,$container) {
// ...
});
```
åè°æ¹æ³æ¯æ两个åæ°ï¼ç¬¬ä¸ä¸ªåæ°æ¯å®¹å¨å¯¹è±¡å®ä¾ï¼ç¬¬äºä¸ªåæ°æ¯å®¹å¨å®ä¾æ¬èº«ã
æè
åç¬æ³¨åä¸ä¸ªæ个容å¨å¯¹è±¡çåè°
```
Container::getInstance()->resolving(\think\Cache::class,function($instance,$container) {
// ...
});
```
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- URL访é®
- 容å¨åä¾èµæ³¨å ¥
- æå¡
- é¨é¢
- ä¸é´ä»¶
- äºä»¶
- è·¯ç±
- è·¯ç±å®ä¹
- åéè§å
- è·¯ç±å°å
- è·¯ç±åæ°
- è·¯ç±ä¸é´ä»¶
- è·¯ç±åç»
- èµæºè·¯ç±
- 注解路ç±
- è·¯ç±ç»å®
- ååè·¯ç±
- MISSè·¯ç±
- è·¨å请æ±
- URLçæ
- æ§å¶å¨
- æ§å¶å¨å®ä¹
- åºç¡æ§å¶å¨
- 空æ§å¶å¨
- èµæºæ§å¶å¨
- æ§å¶å¨ä¸é´ä»¶
- 请æ±
- 请æ±å¯¹è±¡
- 请æ±ä¿¡æ¯
- è¾å ¥åé
- 请æ±ç±»å
- HTTP头信æ¯
- 伪éæ
- åæ°ç»å®
- 请æ±ç¼å
- ååº
- ååºè¾åº
- ååºåæ°
- éå®å
- æ件ä¸è½½
- æ°æ®åº
- è¿æ¥æ°æ®åº
- åå¸å¼æ°æ®åº
- æ¥è¯¢æé å¨
- æ¥è¯¢æ°æ®
- æ·»å æ°æ®
- æ´æ°æ°æ®
- å é¤æ°æ®
- æ¥è¯¢è¡¨è¾¾å¼
- é¾å¼æä½
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- èåæ¥è¯¢
- å页æ¥è¯¢
- æ¶é´æ¥è¯¢
- é«çº§æ¥è¯¢
- è§å¾æ¥è¯¢
- JSONå段
- åæ¥è¯¢
- åçæ¥è¯¢
- æ¥è¯¢äºä»¶
- è·åå¨
- äºå¡æä½
- åå¨è¿ç¨
- æ°æ®é
- æ°æ®åºé©±å¨
- 模å
- å®ä¹
- 模åå段
- æ°å¢
- æ´æ°
- å é¤
- æ¥è¯¢
- æ¥è¯¢èå´
- JSONå段
- è·åå¨
- ä¿®æ¹å¨
- æç´¢å¨
- æ°æ®é
- èªå¨æ¶é´æ³
- åªè¯»å段
- 软å é¤
- ç±»å转æ¢
- 模åè¾åº
- 模åäºä»¶
- 模åå ³è
- ä¸å¯¹ä¸å ³è
- ä¸å¯¹å¤å ³è
- è¿ç¨ä¸å¯¹å¤
- è¿ç¨ä¸å¯¹ä¸
- å¤å¯¹å¤å ³è
- å¤æå ³è
- å ³èé¢è½½å ¥
- å ³èç»è®¡
- å ³èè¾åº
- è§å¾
- 模æ¿åé
- è§å¾è¿æ»¤
- 模æ¿æ¸²æ
- 模æ¿å¼æ
- è§å¾é©±å¨
- é误åæ¥å¿
- å¼å¸¸å¤ç
- æ¥å¿å¤ç
- è°è¯
- è°è¯æ¨¡å¼
- Traceè°è¯
- SQLè°è¯
- åéè°è¯
- è¿ç¨è°è¯
- éªè¯
- éªè¯å¨
- éªè¯è§å
- é误信æ¯
- éªè¯åºæ¯
- è·¯ç±éªè¯
- å ç½®è§å
- 表å令ç
- 注解éªè¯
- æ项
- ç¼å
- Session
- Cookie
- å¤è¯è¨
- ä¸ä¼
- å½ä»¤è¡
- å¯å¨å ç½®æå¡å¨
- æ¥ççæ¬
- èªå¨çæåºç¨ç®å½
- å建类åºæ件
- æ¸ é¤ç¼åæ件
- çææ°æ®è¡¨å段ç¼å
- çæè·¯ç±æ å°ç¼å
- è¾åºè·¯ç±å®ä¹
- èªå®ä¹æ令
- æ©å±åº
- æ°æ®åºè¿ç§»å·¥å ·
- Workerman
- thinkå©æå·¥å ·åº
- éªè¯ç
- Swoole
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿