之前一直用yii2開發(fā)。優(yōu)點(diǎn)是參數(shù)配置組件配置什么的都在一個(gè)地方搞定了。然后代碼里直接使用Yii::$app->組件名就可以調(diào)用。yii幫助做了組件對(duì)象的實(shí)例化。用webman開發(fā)時(shí),感覺新寫組件引用的到處都是,配置文件也寫的很隨意,沒有能統(tǒng)一管理的地方。心中有點(diǎn)疑問:
1.webman是不是不適合像yii那種單例模式的開發(fā)?可以做到自始至終只有一個(gè)Application來處理所有事情
2.或者是我對(duì)webman理解的還不夠,很多東西都需要自己再封裝開發(fā)什么的。比如采用php的di就可以做到像yii那樣優(yōu)雅的開發(fā)?
這個(gè)屬于習(xí)慣問題,有些人喜歡組件完全解耦,使用時(shí)直接使用命名空間引入即可,有些人喜歡在上面再包裹一層統(tǒng)一的入口。并不是說webman不適合yii那樣組件開發(fā)。
如果喜歡yii那種模式,可以自己再封裝一層,比如
新建 app/App.php
<?php
namespace app;
use support\Container;
use support\Db;
use support\Log;
use support\Redis;
use support\Request;
use Workerman\Protocols\Http\Session;
/**
* @property-read Request $request
* @property-read string $app
* @property-read string $controller
* @property-read string $action
* @property-read Session $session
*/
class App
{
/**
* @var Db
*/
public static $db = Db::class;
/**
* @var Redis
*/
public $redis = Redis::class;
/**
* @var Log
*/
public $log = Log::class;
/**
* @var Container
*/
public $container = Container::class;
/**
* @param $name
* @return mixed
*/
public function __get($name)
{
switch ($name) {
case 'request':
return \request();
case 'app':
return \request()->app;
case 'controller':
return \request()->controller;
case 'action':
return \request()->action;
case 'session':
return \request()->session();
}
}
}
喜歡什么東西都可以自己手動(dòng)加進(jìn)去。
在 app/functions.php 里加一個(gè)函數(shù)
/**
* @return App
*/
function app()
{
static $app;
$app = $app ?: new app\App;
return $app;
}
使用的時(shí)候就可以這樣使用
app()->db::table('table')->first();
app()->redis::get('key');
app()->request->path();
但是從視覺是并沒有
Db::table('table')->first();
Redis::get('key');
$request->path();
這種用法簡(jiǎn)潔