다음 튜토리얼 칼럼인 Laravel에서는 PHP 특성을 사용하여 간단한 Facade를 구현하는 방법을 소개합니다. 모두에게 도움이 되기를 바랍니다.
간단한 설명
Facade
는 메서드의 정적화를 구현하는 데 효과적으로 도움이 될 수 있습니다. Laravel
대부분의 확장 패키지는 Facade
를 사용합니다. [추천: laravel 비디오 튜토리얼Facade
可以有效帮我实现方法的静态化。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 'first': case 'find': 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 = 'test:test'; /** * The console command description. * * @var string */ protected $description = 'a test'; /** * 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
]
다음과 같은 간단한 Facade
메인 이는 PHP의 기능 trait
, 매직 메소드 __callStatic
및 리플렉션 클래스 ReflectionClass
를 사용합니다.
사용 시나리오🎜🎜🎜대부분의 백그라운드 시스템은 다음과 유사한 작업을 수행합니다. 🎜rrreee🎜이에는 문제가 없어 보이지만 다음도 있을 수 있습니다. 🎜rrreee🎜이러한 작성 방식은 매우 우아하지 않습니다. . 🎜🎜🎜🎜🎜코드를 업로드하세요🎜🎜🎜🎜🎜🎜1. 먼저 Service🎜🎜rrreee🎜🎜🎜🎜2를 만들어야 합니다. 다중 상속을 위한 특성이 존재합니다. PHP로 이동할 수 있습니다. 문서를 보려면 공식 웹사이트를 방문하세요. 🎜rrreee🎜먼저 마법 메서드
__callStatic
에 중점을 둡니다. 이 메서드는 존재하지 않는 정적 메서드가 호출될 때 트리거됩니다. 유사한 매직 메서드는 __call
입니다. 이는 Facade
의 효과를 얻기 위해 __callStatic
을 사용하는 것입니다. 🎜🎜__callStatic
에는 존재하지 않는 호출된 메서드
인 $method
, $args
라는 두 개의 콜백 매개변수가 있습니다. $method
메소드에 전달된 매개변수(배열 형식)입니다. 🎜🎜이렇게 간단한 특성
이 완성되었습니다. 🎜🎜🎜🎜🎜사용🎜🎜🎜새 명령어
를 만듭니다🎜rrreee🎜다음 내용을 작성하세요🎜rrreee🎜Article
모델은 직접 만들어야 합니다. 🎜이제 효과를 볼 수 있습니다:🎜rrreee🎜🎜🎜🎜결론🎜🎜🎜이런 식으로 abstract
추상 클래스 사용을 포기하고 Facade
와 동일한 효과를 얻습니다. > 효과. 동시에 코드 재사용도 달성됩니다. 🎜이런 방식으로 프로그램을 사용하면 훨씬 더 많은 단계가 필요하지만 우아함에 비하면 성능은 중요하지 않습니다. 🎜🎜표현이 명확하지 않으니 깊이 이해하셔야 합니다. ㅋㅋㅋ위 내용은 PHP 기능 특성을 사용하여 간단한 Laravel Facade 구현하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 지속적인 기술 발전 시대에, Mastering Advanced Frameworks는 현대 프로그래머에게 중요합니다. 이 기사는 Laravel 프레임 워크에서 거의 알려지지 않은 기술을 공유하여 개발 기술을 향상시키는 데 도움이됩니다. 우아한 구문과 광범위한 기능으로 유명한이 기사는 강력한 기능을 파고 효율적이고 유지 관리 가능한 웹 애플리케이션을 만드는 데 도움이되는 실용적인 팁과 요령을 제공합니다.

Laravel과 ThinkPHP는 모두 인기있는 PHP 프레임 워크이며 개발에 고유 한 장점과 단점이 있습니다. 이 기사는 두 가지 깊이를 비교하여 건축, 기능 및 성능 차이를 강조하여 개발자가 특정 프로젝트 요구에 따라 정보에 입각 한 선택을 할 수 있도록 도와줍니다.

Laravel에서 사용자 로그인 기능을 구축하는 것은 중요한 작업 이며이 기사는 사용자 등록에서 로그인 검증에 이르기까지 모든 중요한 단계를 다루는 포괄적 인 개요를 제공합니다. 우리는 Laravel의 내장 검증 기능의 힘을 발휘하고 특정 요구에 맞게 로그인 프로세스를 사용자 정의하고 확장하는 것을 안내합니다. 이 단계별 지침을 따르면 Laravel 애플리케이션 사용자에게 완벽한 액세스 경험을 제공하는 안전하고 안정적인 로그인 시스템을 만들 수 있습니다.

초보자를위한 Laravel Framework 버전 선택 안내서 에서이 기사는 초보자가 많은 버전 중에서 정보에 입각 한 선택을하는 데 도움이되도록 설계된 Laravel의 버전 차이점으로 뛰어 들었습니다. 우리는 각 릴리스의 주요 기능에 중점을두고 장단점을 비교하며 초보자가 기술 수준 및 프로젝트 요구 사항에 따라 가장 적합한 Laravel 버전을 선택할 수 있도록 유용한 조언을 제공 할 것입니다. 초보자에게는 적절한 버전의 Laravel을 선택하는 것이 학습 곡선과 전반적인 개발 경험에 크게 영향을 줄 수 있기 때문에 중요합니다.

Laravel 프레임 워크에는 개발자의 다양한 요구를 충족시키기 위해 버전 번호를 쉽게 볼 수있는 내장 방법이 있습니다. 이 기사는 Composer Command Line 도구 사용, .env 파일에 액세스하거나 PHP 코드를 통해 버전 정보를 얻는 것을 포함하여 이러한 방법을 탐색합니다. 이러한 방법은 Laravel 애플리케이션의 버전 관리를 유지 관리하고 관리하는 데 필수적입니다.

Laravel은 우아한 구문과 강력한 기능으로 개발자에게 인기있는 PHP 기반 웹 응용 프로그램 프레임 워크입니다. 최신 버전은 개발 경험과 응용 프로그램 성능을 향상 시키도록 설계된 많은 개선 사항과 새로운 기능을 소개합니다. 이 기사는 Laravel의 최신 접근 방식으로 뛰어 들어 이러한 업데이트를 활용하여보다 강력하고 효율적인 웹 애플리케이션을 구축하는 방법에 중점을 둘 것입니다.

기사 요약 :이 기사는 Laravel 프레임 워크를 쉽게 설치하는 방법에 대한 독자들을 안내하기위한 자세한 단계별 지침을 제공합니다. Laravel은 웹 애플리케이션의 개발 프로세스를 가속화하는 강력한 PHP 프레임 워크입니다. 이 자습서는 시스템 요구 사항에서 데이터베이스 구성 및 라우팅 설정에 이르기까지 설치 프로세스를 다룹니다. 이러한 단계를 수행함으로써 독자들은 라벨 프로젝트를위한 탄탄한 토대를 빠르고 효율적으로 놓을 수 있습니다.

Laravel 프레임 워크를 배우고 싶지만 자원이나 경제적 압력이 없습니까? 이 기사는 Laravel의 무료 학습을 제공하며 온라인 플랫폼, 문서 및 커뮤니티 포럼과 같은 리소스를 사용하여 PHP 개발 여정을 시작하는 것에서 마스터까지의 탄탄한 토대를 마련하는 방법을 가르쳐줍니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
