Heim PHP-Framework Denken Sie an PHP Teilen Sie einen Anwendungsfall des Thinkphp-Hook-Verhaltens

Teilen Sie einen Anwendungsfall des Thinkphp-Hook-Verhaltens

Sep 09, 2020 am 09:32 AM
hook thinkphp

下面由thinkphp教程栏目给大家介绍一个Thinkphp Hook行为的使用案例,希望对需要的朋友有所帮助!

Teilen Sie einen Anwendungsfall des Thinkphp-Hook-Verhaltens

thinkphp Hook行为的使用案例

行为,官方是如下介绍: 行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,在官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡。

这里指的行为是一个比较抽象的概念,你可以把行为想象成在应用执行过程中的一个动作或者处理。

在框架的执行流程中,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。

而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。

使用

行为的定义很简单,只是在某些场景下的应用,可能有点难以理解。 在 laravel 中, 类似于其事件监听器, 当触发了某一行为进行自动触发相关的操作方法

举个例子来说

一个登录的功能,前期我们只需要校验密码即可,按照以往的方法可以这样做

function checkLogin() {
    
    $this->checkPass();
    
    // -- 新增加的功能
    $this->checkMobile();
    $this->checkCaptcha();
    //... 等等
    
    echo '登录成功';
}
Nach dem Login kopieren

在如上操作中,是不是很麻烦,针对一个登录行为, 如果后期功能的增加我们需要不断的去增加功能就必须得去修改控制器代码

我们进行解耦该怎么做呢?

即将行为,逻辑(钩子)分离开, 让代码更加易于管理

使用如下,我们直接上图

Teilen Sie einen Anwendungsfall des Thinkphp-Hook-Verhaltens

如上,我们定义了三个不同的即将发生的行为, 分别为连接网络 、 关闭电脑、使用电脑

// Connect.php
namespace app\index\behavior;
class Connect
{
    public function run()
    {
        echo '连接网络';
    }
    public function __destruct()
    {
        echo &#39;<br/>&#39;;
    }
}
// End.php
namespace app\index\behavior;
class End
{
    public function run()
    {
        echo &#39;关闭电脑&#39;;
        echo &#39;<br/>&#39;;
    }
}
// On.php
namespace app\index\behavior;
class On
{
    public function run()
    {
        echo &#39;开启电脑&#39;;
        echo &#39;<br/>&#39;;
    }
    public function qq()
    {
        echo &#39;打开QQ&#39;;
        echo &#39;<br/>&#39;;
    }
    public function opBrowser()
    {
        echo &#39;打开浏览器&#39;;
        echo &#39;<br/>&#39;;
    }
    public function app_end(&$param)
    {
        $param = &#39;结束了&#39;;
    }
}
Nach dem Login kopieren

控制器文件 Index.php

namespace app\index\controller;
    
    use think\Hook;
    
    class Index
    {
        public function __construct()
        {
            // 开始绑定使用电脑需要进行的操作
            Hook::add(&#39;app_init&#39;,
                [
                    &#39;app\\index\\behavior\\On&#39;,
                    &#39;app\\index\\behavior\\Connect&#39;,
                ]
            ); // 批量绑定
    
            Hook::add(&#39;qq&#39;, &#39;app\\index\\behavior\\On&#39;);  // 自定义标签名
            Hook::add(&#39;opBrowser&#39;, &#39;app\\index\\behavior\\On&#39;); // 自定义标签名
    //        Hook::add(&#39;app_end&#39;, &#39;app\\index\\behavior\\End&#39;); // 系统标签位,无需绑定,自动执行
    
    
        }
    
        public function index()
        {
            echo &#39;我现在需要使用电脑进行社交&#39;;
            echo &#39;<br/>&#39;;
    
            Hook::listen(&#39;app_init&#39;);  // 手动初始化
    
            Hook::listen(&#39;qq&#39;);  // 打开qq
    
            Hook::listen(&#39;opBrowser&#39;); // 打开浏览器
        }
    }
Nach dem Login kopieren

输出结果

Teilen Sie einen Anwendungsfall des Thinkphp-Hook-Verhaltens

1) 解析

首先,我们可以在一个全局中,例如控制器初始化中可以使用 Hook::add 开始进行绑定, 绑定完成后就可以使用 Hook::listen() 执行相关绑定的方法,尽量不要使用Listen音译去理解这个方法

他实际上不算监听,实际上是运行的意思, 当Listen的时候,会执行相关在前面绑定的方法, 例如 Hook::listen('app_init') 后便会执行 'app\\index\\behavior\\On', 'app\\index\\behavior\\Connect'

中的 run 方法

如果 执行的行为标签 app_init 非系统标签或者在 app\\index\\behavior\\On 中有 app_init 方法,则会就会执行其中app_init的方法,而不是执行run

2) 自定义标签

使用自定义标签必须满足两个条件, 1、Hook::add('qq') 对自定义标签 qq 进行绑定了, 2、对应的行为类中必须存在 qq 这个方法, 否则自动运行 run 方法

3) tags.php 行为绑定

  // ..tags.php
    <?php
    
    
    return [
        &#39;app_init&#39;=> [
            &#39;app\\index\\behavior\\On&#39;,
            &#39;app\\index\\behavior\\Connect&#39;,
        ],
        &#39;app_end&#39;=> [
            &#39;app\\index\\behavior\\End&#39;
        ]
    ];
Nach dem Login kopieren

可以在控制器下目录下使用 tags.php 进行绑定。

Das obige ist der detaillierte Inhalt vonTeilen Sie einen Anwendungsfall des Thinkphp-Hook-Verhaltens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So führen Sie das Thinkphp-Projekt aus So führen Sie das Thinkphp-Projekt aus Apr 09, 2024 pm 05:33 PM

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Was ist besser, Laravel oder Thinkphp? Was ist besser, Laravel oder Thinkphp? Apr 09, 2024 pm 03:18 PM

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP möglicherweise besser geeignet.

Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Nov 22, 2023 pm 12:01 PM

„Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben“ Mit der rasanten Entwicklung der Internettechnologie stellen Webanwendungen immer höhere Anforderungen an die Verarbeitung einer großen Anzahl gleichzeitiger Anforderungen und komplexer Geschäftslogik. Um die Systemleistung und das Benutzererlebnis zu verbessern, erwägen Entwickler häufig die Verwendung asynchroner Aufgaben, um einige zeitaufwändige Vorgänge auszuführen, z. B. das Senden von E-Mails, das Verarbeiten von Datei-Uploads, das Erstellen von Berichten usw. Im Bereich PHP bietet das ThinkPHP-Framework als beliebtes Entwicklungsframework einige praktische Möglichkeiten zur Implementierung asynchroner Aufgaben.

So installieren Sie thinkphp So installieren Sie thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP-Installationsschritte: Bereiten Sie PHP-, Composer- und MySQL-Umgebungen vor. Erstellen Sie Projekte mit Composer. Installieren Sie das ThinkPHP-Framework und die Abhängigkeiten. Datenbankverbindung konfigurieren. Anwendungscode generieren. Starten Sie die Anwendung und besuchen Sie http://localhost:8000.

Wie ist die Leistung von thinkphp? Wie ist die Leistung von thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ist ein leistungsstarkes PHP-Framework mit Vorteilen wie Caching-Mechanismus, Codeoptimierung, Parallelverarbeitung und Datenbankoptimierung. Offizielle Leistungstests zeigen, dass es mehr als 10.000 Anfragen pro Sekunde verarbeiten kann und in großen Websites und Unternehmenssystemen wie JD.com und Ctrip in praktischen Anwendungen weit verbreitet ist.

RPC-Dienst basierend auf ThinkPHP6 und Swoole zur Implementierung der Dateiübertragungsfunktion RPC-Dienst basierend auf ThinkPHP6 und Swoole zur Implementierung der Dateiübertragungsfunktion Oct 12, 2023 pm 12:06 PM

Der auf ThinkPHP6 und Swoole basierende RPC-Dienst implementiert die Dateiübertragungsfunktion. Einführung: Mit der Entwicklung des Internets ist die Dateiübertragung in unserer täglichen Arbeit immer wichtiger geworden. Um die Effizienz und Sicherheit der Dateiübertragung zu verbessern, wird in diesem Artikel die spezifische Implementierungsmethode der Dateiübertragungsfunktion basierend auf RPC-Diensten basierend auf ThinkPHP6 und Swoole vorgestellt. Wir werden ThinkPHP6 als Web-Framework verwenden und die RPC-Funktion von Swoole nutzen, um eine serverübergreifende Dateiübertragung zu erreichen. 1. Umweltstandard

See all articles