Heim PHP-Framework Laravel Implementierung einer einfachen Laravel-Fassade mithilfe von PHP-Funktionsmerkmalen

Implementierung einer einfachen Laravel-Fassade mithilfe von PHP-Funktionsmerkmalen

Jan 27, 2022 pm 04:33 PM
facade trait

Die folgende Tutorial-Kolumne von Laravel zeigt Ihnen, wie Sie PHP-Eigenschaften verwenden, um eine einfache Fassade zu implementieren. Ich hoffe, dass sie für alle hilfreich ist!

Kurze Beschreibung

Facade kann mir effektiv dabei helfen, die Statik von Methoden zu realisieren. Laravel Die meisten Erweiterungspakete verwenden Facade. [Empfohlen: Laravel-Video-TutorialFacade 可以有效帮我实现方法的静态化。Laravel 大部分的扩展包都使用了 Facade。【推荐:laravel视频教程
下面的简易 Facade 主要是利用 PHP 的特性 trait,魔术方法 __callStatic,反射类 ReflectionClass

使用场景

后台系统大部分都会有类似这样的操作:

<?php
$user = User::find($id);if (!$user) {
    throw new \Expection("资源不存在");}
Nach dem Login kopieren

这样似乎没有什么问题,但是还会存在下面这样的:

$article = Article::find($id);if (!$article) {
    throw new \Expection("资源不存在");}$article->delete();
Nach dem Login kopieren

这样写法十分不优雅。

上代码

1、首先我们应该要有一个 Service

<?phpnamespace App\Services;use App\Traits\ModeServiceTrait;class ModelService extends BaseService{
    use ModeServiceTrait;}
Nach dem Login kopieren

2、新建一个 Trait

trait 为了多继承而存在的,可以去 PHP官网 看文档。

<?php
namespace App\Traits;
use \ReflectionClass;
use \Exception;use \ReflectionException;
use Illuminate\Database\Eloquent\Model;
use App\Exceptions\ResourceException;
/**
 * @method static Model find(string $className, int $id, callable $callback = null)
 *
 * @see Model
 * @package App\Services
 */trait ModeServiceTrait{
    /**
     * 回调方法
     *
     * @param Model|null $model
     * @param string $method
     * @return Model
     * @throws ResourceException
     */
    public static function callback(Model|null $model, string $method): Model    {
        switch ($method)
        {
            case &#39;first&#39;:
            case &#39;find&#39;:
                if (!$model) {
                    throw new ResourceException("资源不存在");
                }
                break;

            default:

                break;
        }

        return $model;
    }

    /**
     * 调用不存在的方法时触发
     *
     * @param $method
     * @param $args
     * @return false|mixed
     * @throws ReflectionException
     * @throws ResourceException
     * @throws Exception
     */
    public static function __callStatic($method, $args)
    {
        $className = $args[0];
        $arg = $args[1];

        // 判断模型类是否存在
        if (!class_exists($className)) {
            throw new Exception("The class {$className} could not be found. from:" . __CLASS__);
        }

        // 利用反射实例化其类
        $reflection = new ReflectionClass($className);
        $instance = $reflection->newInstanceArgs();

        // 调用该不存在的方法
        $model = call_user_func_array([$instance, $method], [$arg]);

        // 如果存在复杂操作交给 callback
        return isset($args[2]) ? $args[2]($model) : self::callback($model, $method);
    }}
Nach dem Login kopieren

首先我们关注 __callStatic 这个魔术方法。 当调用不存在的静态方法时会触发该方法。和他相似的魔术方法是 __call。这是使用 __callStatic 是为了达到 Facade 的效果。

__callStatic 有两个回调参数 $method被调用的且不存在的方法$args$method 方法中所传递的参数(数组形式)。

这样一个简易的 trait 就完成了。

使用

我们新建一个 command

$ php artisan make:command TestCommand
Nach dem Login kopieren

写入下面的内容

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Services\ModelService;
use App\Models\Article\Article;
class TestCommand extends Command{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = &#39;test:test&#39;;

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = &#39;a test&#39;;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $article = ModelService::find(Article::class, 1);

        $article = ModelService::find(Article::class, 1, function ($model) {
            return $model->load('author');
        });
    }}
Nach dem Login kopieren

其中的 Article 模型需要自己去创建。
接下来就可以看看效果了:

$ php artisan test:test
Nach dem Login kopieren

结语

这样我们就抛弃了使用 abstract 抽象类,来达到了跟 Facade]
Die folgende einfache Fassade Main Es verwendet die PHP-Funktionen trait, die magische Methode __callStatic und die Reflexionsklasse ReflectionClass.

Nutzungsszenarien🎜🎜🎜Die meisten Hintergrundsysteme haben ähnliche Vorgänge wie diesen: 🎜rrreee🎜Damit scheint es kein Problem zu geben, aber es wird auch Folgendes geben: 🎜rrreee🎜Diese Schreibweise ist sehr unelegant . 🎜🎜🎜🎜🎜Laden Sie den Code hoch🎜🎜🎜🎜🎜🎜1. Zuerst sollten wir einen Service🎜🎜rrreee🎜🎜🎜🎜2 erstellen Offizielle Website, um das Dokument anzusehen. 🎜rrreee🎜Zuerst konzentrieren wir uns auf die magische Methode __callStatic. Diese Methode wird ausgelöst, wenn eine nicht vorhandene statische Methode aufgerufen wird. Eine ähnliche magische Methode ist __call. Dabei wird __callStatic verwendet, um den Effekt von Facade zu erzielen. 🎜🎜__callStatic hat zwei Rückrufparameter $method, eine aufgerufene Methode, die nicht existiert, $args Es ist der Parameter (in Array-Form), der in der Methode $method übergeben wird. 🎜🎜So ein einfaches Merkmal ist vollständig. 🎜🎜🎜🎜🎜Mit🎜🎜🎜Wir erstellen einen neuen Befehl🎜rrreee🎜Schreiben Sie den folgenden Inhalt🎜rrreee🎜Das Artikel-Modell muss von Ihnen selbst erstellt werden. 🎜Jetzt können Sie den Effekt sehen:🎜rrreee🎜🎜🎜🎜Fazit🎜🎜🎜Auf diese Weise verzichten wir auf die Verwendung der abstrakten Klasse abstract und erzielen den gleichen Effekt wie Facade Wirkung. Gleichzeitig wird auch die Wiederverwendung von Code erreicht. 🎜Die Verwendung des Programms auf diese Weise erfordert viel mehr Schritte, aber im Vergleich zur Eleganz spielt die Leistung keine Rolle. 🎜🎜Der Ausdruck ist nicht sehr klar, man muss ihn genau verstehen. 🎜                                                                                                            

Das obige ist der detaillierte Inhalt vonImplementierung einer einfachen Laravel-Fassade mithilfe von PHP-Funktionsmerkmalen. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

PHP-Merkmal DTO: Vereinfachung der Entwicklung von Datenübertragungsobjekten PHP-Merkmal DTO: Vereinfachung der Entwicklung von Datenübertragungsobjekten Oct 12, 2023 am 09:04 AM

PHPtraitDTO: Vereinfachung der Entwicklung von Datenübertragungsobjekten Einführung: In der modernen Softwareentwicklung spielen Datenübertragungsobjekte (kurz DataTransferObject, DTO) eine wichtige Rolle. DTO ist ein reiner Datencontainer, der zum Übertragen von Daten zwischen Schichten verwendet wird. Während des Entwicklungsprozesses müssen Entwickler jedoch eine große Menge ähnlichen Codes schreiben, um DTOs zu definieren und zu betreiben. Um diesen Prozess zu vereinfachen, wurde die Trait-Funktion in PHP eingeführt. Wir können die Trait-Funktion dazu verwenden

Vertiefendes Verständnis der Entwurfsmuster und -praktiken von PHP Trait DTO Vertiefendes Verständnis der Entwurfsmuster und -praktiken von PHP Trait DTO Oct 12, 2023 am 08:48 AM

Vertiefendes Verständnis der Designmuster und -praktiken von PHPtraitDTO Einführung: In der PHP-Entwicklung sind Designmuster ein wesentlicher Bestandteil. Unter diesen ist DTO (DataTransferObject) ein häufig verwendetes Entwurfsmuster zum Kapseln von Datenübertragungsobjekten. Bei der Implementierung von DTO kann die Verwendung von Merkmalen (Features) die Wiederverwendbarkeit und Flexibilität des Codes effektiv verbessern. Dieser Artikel befasst sich mit den Entwurfsmustern und -praktiken von traitDTO in PHP

PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses Oct 12, 2023 pm 03:10 PM

PHPtraitDTO: Ein wichtiges Tool zur Optimierung des Datenübertragungsprozesses. Es sind spezifische Codebeispiele erforderlich. Einführung: Während des Entwicklungsprozesses ist die Datenübertragung eine sehr häufige Anforderung, insbesondere wenn Daten zwischen verschiedenen Ebenen übertragen werden. Bei der Übermittlung dieser Daten müssen wir die Daten häufig verarbeiten, überprüfen oder konvertieren, um unterschiedliche Geschäftsanforderungen zu erfüllen. Um die Lesbarkeit und Wartbarkeit des Codes zu verbessern, können wir zur Optimierung PHPtraitDTO (DataTransferObject) verwenden

PHP-Merkmal DTO: Erzielung von Einfachheit und Flexibilität bei Datenübertragungsobjekten PHP-Merkmal DTO: Erzielung von Einfachheit und Flexibilität bei Datenübertragungsobjekten Oct 12, 2023 am 10:21 AM

PHPtraitDTO: Einfachheit und Flexibilität von Datenübertragungsobjekten implementieren Einführung: Im PHP-Entwicklungsprozess sind häufig die Datenübertragung und -verarbeitung beteiligt. Das DataTransferObject (kurz DTO) ist ein Entwurfsmuster, das zur Übertragung von Daten zwischen verschiedenen Schichten verwendet wird. Während des Übertragungsprozesses vereinfacht DTO Datenoperationen durch die Kapselung von Daten und die Bereitstellung öffentlicher Zugriffsmethoden. In diesem Artikel wird erläutert, wie Sie PHPtrait zur Implementierung von DT verwenden

Implementieren Sie ein hochgradig anpassbares Datenübertragungs-Framework mithilfe des PHP-Trait-DTO Implementieren Sie ein hochgradig anpassbares Datenübertragungs-Framework mithilfe des PHP-Trait-DTO Oct 12, 2023 pm 12:46 PM

Implementierung eines hochgradig anpassbaren Datenübertragungs-Frameworks mit PHPtraitDTO Da Websites und Anwendungen immer komplexer werden, wird die Datenübertragung immer wichtiger. In PHP kann die Verwendung von DataTransferObject (kurz DTO) zur Abwicklung der Datenübertragung den Code erheblich vereinfachen und die Wartbarkeit und Skalierbarkeit verbessern. In diesem Artikel wird erläutert, wie Sie mit PHPtrait und DTO ein hochgradig anpassbares Datenübertragungs-Framework implementieren und entsprechende Codebeispiele bereitstellen.

PHP-Merkmal DTO: elegantes Datenübertragungsobjektmuster PHP-Merkmal DTO: elegantes Datenübertragungsobjektmuster Oct 12, 2023 am 08:34 AM

PHPtraitDTO: Elegant Data Transfer Object Pattern Übersicht: Data Transfer Object (kurz DTO) ist ein Entwurfsmuster, das zum Übertragen von Daten zwischen verschiedenen Ebenen verwendet wird. In Anwendungen ist es häufig erforderlich, Daten von einer Datenbank oder einem externen Dienst abzurufen und sie zwischen verschiedenen Schichten der Anwendung weiterzugeben. Der DTO-Modus kann die Datenübertragung prägnanter und klarer gestalten und erleichtert außerdem die Erweiterung und Wartung. In PHP können wir Merkmale verwenden, um DTO zu implementieren

PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses PHP-Merkmal DTO: ein wichtiges Werkzeug zur Optimierung des Datenübertragungsprozesses Oct 12, 2023 am 09:27 AM

PHPtraitDTO: Ein wichtiges Tool zur Optimierung des Datenübertragungsprozesses. Im Entwicklungsprozess sind spezifische Codebeispiele erforderlich. Die effiziente Übertragung von Daten ist zu einem der Probleme geworden, die Entwickler lösen müssen. In der PHP-Sprache kann die Verwendung von traitDTO (DataTransferObject) den Datenübertragungsprozess optimieren und die Effizienz der Datenübertragung verbessern. In diesem Artikel wird vorgestellt, was TraitDTO ist und wie man es zur Optimierung des Datenübertragungsflusses verwendet

PHP-Merkmal DTO: Schlüsseltechnologie zur Verbesserung der Datenübertragungseffizienz PHP-Merkmal DTO: Schlüsseltechnologie zur Verbesserung der Datenübertragungseffizienz Oct 12, 2023 pm 03:01 PM

PHPtraitDTO: Einführung in die Schlüsseltechnologie zur Verbesserung der Datenübertragungseffizienz: In der modernen Softwareentwicklung ist die Datenübertragung ein sehr wichtiges Bindeglied. In den meisten Anwendungen müssen Daten von einem Ort zum anderen übertragen werden, beispielsweise von der Datenbank zur Front-End-Seite, vom Front-End-Formular zur Back-End-Verarbeitungslogik usw. Die Effizienz der Datenübertragung wirkt sich direkt auf die Leistung und das Benutzererlebnis des gesamten Systems aus. Um die Effizienz der Datenübertragung zu verbessern, können wir PHPs traitDTO (DataTransferO) verwenden

See all articles