国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman這種常駐內(nèi)存加多進(jìn)程的框架是不是不適合像yii2那樣組件化開發(fā)?

如果

之前一直用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ā)?

2125 3 1
3個(gè)回答

admin

難道這不是容器嗎?

  • 如果 2022-06-28

    有可能把組件的初始化像yii2那樣直接用配置的方式引入么?比如yii2在web.php里配置一個(gè)wechat組件,其他任何地方都可以直接Yii::$app->wechat運(yùn)行

hans

并不是

  • 暫無評(píng)論
walkor 打賞

這個(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)潔

  • 如果 2022-06-28

    謝謝大佬提供思路!

  • 如果 2022-06-28

    不過心里還有個(gè)疑問,就是這樣的用法,多進(jìn)程間的數(shù)據(jù)不會(huì)互相污染么?functions里的方法會(huì)在某個(gè)進(jìn)程建立后,在這個(gè)進(jìn)程內(nèi)維持自己的數(shù)據(jù)對(duì)吧

  • walkor 2022-06-28

    進(jìn)程間是完全隔離的,變量 數(shù)據(jù)都不互相影響

年代過于久遠(yuǎn),無法發(fā)表回答
??