suchen
HeimPHP-FrameworkLaravelImplementierung einer einfachen Laravel-Fassade mithilfe von PHP-Funktionsmerkmalen

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("资源不存在");}

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

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

这样写法十分不优雅。

上代码

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

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

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);
    }}

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

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

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

使用

我们新建一个 command

$ php artisan make:command TestCommand

写入下面的内容

<?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');
        });
    }}

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

$ php artisan test:test

结语

这样我们就抛弃了使用 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!

Stellungnahme
Dieser Artikel ist reproduziert unter:learnku. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Warum ist Laravel so beliebt?Warum ist Laravel so beliebt?Apr 02, 2025 pm 02:16 PM

Die Popularität von Laravel umfasst seinen vereinfachten Entwicklungsprozess, eine angenehme Entwicklungsumgebung und umfangreiche Merkmale. 1) Es absorbiert die Designphilosophie von RubyonRails und kombiniert die Flexibilität von PHP. 2) Bereitstellung von Werkzeugen wie eloquentorm, Blade Template Engine usw. zur Verbesserung der Entwicklungseffizienz. 3) Sein MVC -Architektur- und Abhängigkeitsinjektionsmechanismus macht den Code modularer und prüfbarer. 4) Bietet leistungsstarke Debugging -Tools und Leistungsoptimierungsmethoden wie Caching -Systeme und Best Practices.

Was ist besser, Django oder Laravel?Was ist besser, Django oder Laravel?Mar 28, 2025 am 10:41 AM

Sowohl Django als auch Laravel sind Full-Stack-Frameworks. Django eignet sich für Python -Entwickler und komplexe Geschäftslogik, während Laravel für PHP -Entwickler und elegante Syntax geeignet ist. 1.Django basiert auf Python und folgt der "batteriebetriebenen" Philosophie, die für schnelle Entwicklung und hohe Parallelität geeignet ist. 2. Laravel basiert auf PHP, der die Entwicklererfahrung betont und für kleine bis mittlere Projekte geeignet ist.

Welches ist besser PHP oder Laravel?Welches ist besser PHP oder Laravel?Mar 27, 2025 pm 05:31 PM

PHP und Laravel sind nicht direkt vergleichbar, da Laravel ein PHP-basierter Framework ist. 1.PHP ist für kleine Projekte oder schnelle Prototypen geeignet, da es einfach und direkt ist. 2. Laravel ist für große Projekte oder effiziente Entwicklung geeignet, da es umfangreiche Funktionen und Werkzeuge bietet, aber eine steile Lernkurve aufweist und möglicherweise nicht so gut ist wie reines PHP.

Ist Laravel ein Frontend oder ein Backend?Ist Laravel ein Frontend oder ein Backend?Mar 27, 2025 pm 05:31 PM

LaravelisabackendFrameworkBuiltonPhp, entworfene WebApplicationDevelopment.itfocuseSonserver-Sidelogic, DatabaSemanagement und Applicationsstruktur und CanBeintegratedWithFrontendTechnologies-ähnlich.

Wie erstelle und verwende ich benutzerdefinierte Blade -Direktiven in Laravel?Wie erstelle und verwende ich benutzerdefinierte Blade -Direktiven in Laravel?Mar 17, 2025 pm 02:50 PM

In dem Artikel wird das Erstellen und Verwenden benutzerdefinierter Blade -Richtlinien in Laravel erläutert, um die Vorlagen zu verbessern. Es umfasst die Definition von Direktiven, die Verwendung in Vorlagen und die Verwaltung in großen Projekten, um Vorteile wie eine verbesserte Wiederverwendbarkeit von Code und R hervorzuheben

Wie verwende ich die Komponenten von Laravel, um wiederverwendbare UI -Elemente zu erstellen?Wie verwende ich die Komponenten von Laravel, um wiederverwendbare UI -Elemente zu erstellen?Mar 17, 2025 pm 02:47 PM

In dem Artikel wird das Erstellen und Anpassen wiederverwendbarer UI -Elemente in Laravel mithilfe von Komponenten ermittelt, die Best Practices für die Organisation anbieten und Vorschläge für Verbesserungspakete vorschlagen.

Wie kann ich die Routing-Funktionen von Laravel verwenden, um seo-freundliche URLs zu erstellen?Wie kann ich die Routing-Funktionen von Laravel verwenden, um seo-freundliche URLs zu erstellen?Mar 17, 2025 pm 02:43 PM

In dem Artikel werden Laravels Routing verwendet, um SEO-freundliche URLs zu erstellen, die Best Practices, kanonische URLs und Tools für die SEO-Optimierung abdecken.

Wie benutze ich Laravels handwerkliche Konsole, um gemeinsame Aufgaben zu automatisieren?Wie benutze ich Laravels handwerkliche Konsole, um gemeinsame Aufgaben zu automatisieren?Mar 17, 2025 pm 02:39 PM

Laravels Artisan Console automatisiert Aufgaben wie das Generieren von Code, das Ausführen von Migrationen und die Planung. Zu den wichtigsten Befehlen gehören: Controller, Migrieren und DB: Saatgut. Benutzerdefinierte Befehle können für bestimmte Anforderungen erstellt werden, um die Workflow -Effizienz zu verbessern.

See all articles

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)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),