Rumah rangka kerja php Laravel Melaksanakan Fasad Laravel yang mudah menggunakan ciri ciri PHP

Melaksanakan Fasad Laravel yang mudah menggunakan ciri ciri PHP

Jan 27, 2022 pm 04:33 PM
facade trait

Lajur tutorial Laravel berikut akan memperkenalkan kepada anda cara menggunakan ciri PHP untuk melaksanakan Fasad mudah saya harap ia akan membantu anda.

Penerangan ringkas

Facade boleh membantu saya merealisasikan kaedah statik secara berkesan Laravel Kebanyakan pek pengembangan menggunakan Facade. [Disyorkan: Tutorial Video Laravel]
Facade mudah berikut terutamanya menggunakan ciri PHP trait, kaedah ajaib __callStatic dan kelas refleksi ReflectionClass.

Senario Penggunaan

Kebanyakan sistem latar belakang akan mempunyai operasi yang serupa dengan ini:

<?php
$user = User::find($id);if (!$user) {
    throw new \Expection("资源不存在");}
Salin selepas log masuk

Ini nampaknya tiada apa-apa . Masalah, tetapi akan ada yang berikut:

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

Cara penulisan ini sangat tidak elegan.

Kod

1. Mula-mula kita patut ada Perkhidmatan

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

2. Cipta Sifat baharu

ciri wujud untuk pelbagai warisan Anda boleh pergi ke tapak web rasmi PHP untuk membaca dokumentasi.

<?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);
    }}
Salin selepas log masuk

Mula-mula kita fokus pada __callStatic kaedah ajaib ini. Kaedah ini dicetuskan apabila kaedah statik yang tidak wujud dipanggil. Kaedah sihir yang serupa dengannya ialah __call. Ini menggunakan __callStatic untuk mencapai kesan Facade.

__callStatic mempunyai dua parameter panggil balik $method ialah 被调用的且不存在的方法 dan $args ialah parameter (dalam bentuk tatasusunan) yang diluluskan dalam kaedah $method.

trait semudah itu sudah selesai.

Gunakan

untuk mencipta yang baharu command

$ php artisan make:command TestCommand
Salin selepas log masuk

dan tulis kandungan berikut

<?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');
        });
    }}
Salin selepas log masuk

Model Article perlu dicipta sendiri.
Seterusnya anda boleh melihat kesannya:

$ php artisan test:test
Salin selepas log masuk

Kesimpulan

Dengan cara ini kita meninggalkan penggunaan abstract abstraksi kelas untuk mencapai kesan yang sama seperti Facade. Pada masa yang sama, penggunaan semula kod juga dicapai.
Menggunakan program dengan cara ini akan mengambil lebih banyak langkah, tetapi berbanding dengan keanggunan, prestasi tidak penting.

Ungkapan tidak begitu jelas, anda perlu memahaminya dengan mendalam. <

Atas ialah kandungan terperinci Melaksanakan Fasad Laravel yang mudah menggunakan ciri ciri PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ciri PHP DTO: Memudahkan pembangunan objek pemindahan data Ciri PHP DTO: Memudahkan pembangunan objek pemindahan data Oct 12, 2023 am 09:04 AM

PHPtraitDTO: Memudahkan pembangunan objek pemindahan data Pengenalan: Dalam pembangunan perisian moden, objek pemindahan data (DataTransferObject, dirujuk sebagai DTO) memainkan peranan penting. DTO ialah bekas data tulen yang digunakan untuk memindahkan data antara lapisan. Walau bagaimanapun, semasa proses pembangunan, pembangun perlu menulis sejumlah besar kod serupa untuk mentakrif dan mengendalikan DTO. Untuk memudahkan proses ini, ciri ciri telah diperkenalkan dalam PHP Kita boleh menggunakan ciri ciri untuk

Pemahaman mendalam tentang corak reka bentuk dan amalan DTO trait PHP Pemahaman mendalam tentang corak reka bentuk dan amalan DTO trait PHP Oct 12, 2023 am 08:48 AM

Pemahaman mendalam tentang corak reka bentuk dan amalan PHPtraitDTO Pengenalan: Dalam pembangunan PHP, corak reka bentuk adalah bahagian penting. Antaranya, DTO (DataTransferObject) ialah corak reka bentuk yang biasa digunakan untuk merangkum objek pemindahan data. Dalam proses melaksanakan DTO, menggunakan ciri (ciri) boleh meningkatkan kebolehgunaan semula dan fleksibiliti kod dengan berkesan. Artikel ini akan menyelidiki corak reka bentuk dan amalan traitDTO dalam PHP

DTO ciri PHP: alat utama untuk mengoptimumkan proses pemindahan data DTO ciri PHP: alat utama untuk mengoptimumkan proses pemindahan data Oct 12, 2023 pm 03:10 PM

PHPtraitDTO: Alat utama untuk mengoptimumkan proses penghantaran data, contoh kod khusus diperlukan Pengenalan: Semasa proses pembangunan, penghantaran data adalah keperluan yang sangat biasa, terutamanya apabila data dipindahkan antara tahap yang berbeza. Dalam proses penghantaran data ini, kami selalunya perlu memproses, mengesahkan atau menukar data untuk memenuhi keperluan perniagaan yang berbeza. Untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod, kami boleh menggunakan PHPtraitDTO (DataTransferObject) untuk mengoptimumkan

DTO ciri PHP: mencapai kesederhanaan dan fleksibiliti dalam objek pemindahan data DTO ciri PHP: mencapai kesederhanaan dan fleksibiliti dalam objek pemindahan data Oct 12, 2023 am 10:21 AM

PHPtraitDTO: Melaksanakan kesederhanaan dan fleksibiliti objek pemindahan data Pengenalan: Dalam proses pembangunan PHP, penghantaran dan pemprosesan data sering terlibat. DataTransferObject (pendek kata DTO) ialah corak reka bentuk yang digunakan untuk memindahkan data antara lapisan yang berbeza. Semasa proses penghantaran, DTO memudahkan operasi data dengan merangkum data dan menyediakan kaedah capaian awam. Artikel ini akan memperkenalkan cara menggunakan PHPtrait untuk melaksanakan DT

Laksanakan rangka kerja pemindahan data yang sangat disesuaikan menggunakan DTO trait PHP Laksanakan rangka kerja pemindahan data yang sangat disesuaikan menggunakan DTO trait PHP Oct 12, 2023 pm 12:46 PM

Melaksanakan rangka kerja pemindahan data yang boleh disesuaikan menggunakan PHPtraitDTO Apabila tapak web dan aplikasi menjadi lebih kompleks, pemindahan data menjadi semakin penting. Dalam PHP, menggunakan DataTransferObject (pendek kata DTO) untuk mengendalikan pemindahan data boleh memudahkan kod dan meningkatkan kebolehselenggaraan dan kebolehskalaan. Artikel ini akan memperkenalkan cara menggunakan PHPtrait dan DTO untuk melaksanakan rangka kerja pemindahan data yang boleh disesuaikan dan menyediakan contoh kod yang sepadan.

Ciri PHP DTO: corak objek pemindahan data yang elegan Ciri PHP DTO: corak objek pemindahan data yang elegan Oct 12, 2023 am 08:34 AM

PHPtraitDTO: Gambaran Keseluruhan Corak Objek Pemindahan Data Elegan: Objek Pemindahan Data (pendek kata DTO) ialah corak reka bentuk yang digunakan untuk memindahkan data antara lapisan yang berbeza. Dalam aplikasi, selalunya perlu untuk mendapatkan data daripada pangkalan data atau perkhidmatan luaran dan menghantarnya antara lapisan aplikasi yang berbeza. Mod DTO boleh menjadikan penghantaran data lebih ringkas dan jelas, dan juga memudahkan pengembangan dan penyelenggaraan. Dalam PHP, kita boleh menggunakan ciri untuk melaksanakan DTO

DTO ciri PHP: alat utama untuk mengoptimumkan proses pemindahan data DTO ciri PHP: alat utama untuk mengoptimumkan proses pemindahan data Oct 12, 2023 am 09:27 AM

PHPtraitDTO: Alat utama untuk mengoptimumkan proses penghantaran data Contoh kod khusus diperlukan Dalam proses pembangunan, penghantaran data adalah pautan yang sangat kritikal. Cara menghantar data dengan cekap telah menjadi salah satu masalah yang perlu diselesaikan oleh pembangun. Dalam bahasa PHP, menggunakan traitDTO (DataTransferObject) boleh mengoptimumkan proses penghantaran data dan meningkatkan kecekapan penghantaran data. Artikel ini akan memperkenalkan apa itu traitDTO dan cara menggunakannya untuk mengoptimumkan aliran pemindahan data

Bagaimana untuk melanjutkan fungsi PHP tersuai menggunakan ciri? Bagaimana untuk melanjutkan fungsi PHP tersuai menggunakan ciri? Apr 23, 2024 am 09:27 AM

Bagaimana untuk melanjutkan fungsi PHP tersuai menggunakan ciri? Tentukan sifat yang mengandungi kaedah sambungan. Gunakan kata kunci penggunaan untuk memasukkan ciri ke dalam fungsi tersuai. Akses kaedah ciri melalui $this dalam fungsi tersuai.

See all articles