Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lernt PHP7 von anderen Frameworks und schreibt sein eigenes Framework?

Wie lernt PHP7 von anderen Frameworks und schreibt sein eigenes Framework?

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-08-02 15:55:081930Durchsuche

Die Kernverbindung des Frameworks reicht von der anfänglichen Analyse des Anforderungsroutings über die Verteilung des Controllers bis hin zur Dateninteraktion des Modells und der Antwort. Die Implementierung mit anderen Frameworks wäre sehr umständlich und würde zu viele Inhalte integrieren, von denen viele nicht benötigt werden. Deshalb habe ich ein einfaches und praktisches Framework geschrieben, das auf anderen Frameworks basiert.

Wie lernt PHP7 von anderen Frameworks und schreibt sein eigenes Framework?

Beginnen wir mit dem Routing:

1) Routing

Die Regeln des Routing-Protokolls verwenden den Vergleich regulärer Ausdrücke, um verschiedene Links an verschiedene Controller zu verteilen, und unterstützen auch den Aufruf anonymer Funktionen

// 第一种,使用匿名函数
App::router()->get('/', function () {
    echo "Beauty Framework.";
});
// 第二种,使用url分发到控制器
App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');

Der implementierte Kerncode: ( ist es sehr einfach?)

if (is_string($lostrcallable) && preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!', $lostrcallable, $matches)) {
            $class  = $matches[1];
            $method = $matches[2];

            $callable = function () use ($class, $method) {
                static $obj = null;
                if ($obj === null) {

                    $obj = new $class;
                }

                return call_user_func_array(array($obj, $method), func_get_args());
            };
        }

2) Wenn kein Controller vorhanden ist

, können Sie die Anfrage überall dort bearbeiten, wo Sie darauf zeigen. Laut MVC wird jedoch empfohlen, sie in den Controller zu schreiben. Wenn Sie so denken, Mach es einfach;

3) Modellebene

Die Dao-Klasse ist hier direkt für Datenbankabfrageoperationen integriert, da viele Leute jetzt MySQL verwenden und die regulären Operationen von MySQL gekoppelt sind, weil die Datenbank Die native Operation wird eine verursachen Es gibt viele Injektions- und andere Probleme, und es gibt keine direkte Qquery-Methode dafür.

4) DAO-Schicht

Da es in vielen Fällen notwendig ist, Lesen und Schreiben zu trennen, es aber zu umständlich ist, MySQL Proxy zu verwenden, um dies zu erreichen, wurde eine Unterstützung für Datenbankabfragen implementiert, um entsprechend Master- und Slave-Datenbanken zu verwenden zu verschiedenen SQL.

Wie geht das?

Es ist direkt nach nicht verwendeten Abfragevorgängen unterteilt. Ausgewählte Abfragevorgänge werden direkt der Lesebibliothek zugewiesen, und Einfügen, Aktualisieren und Löschen werden direkt der Schreibbibliothek zugewiesen. Sie können es auch direkt mit onMasterConnection/onSlaveConnection angeben.

Sehen Sie sich an, wie Select es macht. Dieser Teil ist die Implementierungslogik:

    /**
     * 获取查询内容,以数组形式返回,数据内为array。
     *
     * @access public
     * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset)
     *                             or only $count
     *
     * @return mixed Array of Clients
     */
    protected function get($limit = null)
    {
        $this->dbClient->setQueryChannel($this->channel);

        $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields);
        $this->_reset();

        if ($this->dbClient->count == 0) {
            return [];
        }

        return $results;
    }

5) Konfigurationsklasse

In der Entwicklungsumgebung und der Produktionsumgebung werden verschiedene Konfigurationsumgebungen verwendet. Im Framework können Sie eine .env-Umgebung zum Wechseln erstellen. Entwicklung und Produktion können routinemäßig in der Konfiguration festgelegt werden. Welche Umgebung auch immer verwendet wird, wird in .env festgelegt

; This is a environment configuration file
environment=development

Natürlich gibt es auch einige öffentliche Konfigurationsinformationen, die direkt in der Konfigurationsdatei festgelegt werden können, sodass sie in jeder verwendet werden können Umfeld.

// 支持使用.连接访问配置项,访问的是config/app.php中的config key
\Beauty\Core\App::config()->get("app.config");

6) Antwort anfordern

Da keine Ansicht erforderlich ist und nur JSON-Daten zurückgegeben werden müssen, wird Text/JSON direkt in den Header geschrieben. = =

Andere Implementierungen

  • Memcache und Redis verwenden konsistentes Hashing, um auf verschiedene Instanzen zuzugreifen.

  • Validator-Verifizierungsklasse

Die spezifischen Codes finden Sie auf Github https://github.com/tigerk/Beauty

Das war's. Wenn Sie noch etwas wissen möchten, können Sie hier klicken. → →php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie lernt PHP7 von anderen Frameworks und schreibt sein eigenes Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen