Laravel 依赖注入,Facades 类最简单的使用
依赖注入
直接形式
public function index(Request $request){
}
public function index(Test $test)
{
echo $test->testSay();
}
这里都是依赖注入的一种表现,它们的本质是 new 类
然后复制给一个变量代替 。
操作指南:
- 可以定义一个类(非抽血,接口类),然后直接注入即可。
绑定形式
我们在 app/Providers/
下任意一个注册提供者在 register
里面注册一下我们的要执行的类
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind('Test', function ($app) {
return new \App\PayServices\Test();
});
}
}
test 类
<?php
namespace App\PayServices;
class Test
{
public function testSay(){
return 'This is testSay';
}
}
那么我们现在要来输出怎么输出呢
public function index(Test $test1)
{
echo $test1->testSay();
echo '<br/>';
$test2=app('Test');
echo $test2->testSay();
echo '<br/>';
$test3=app()->make('Test');
echo $test3->testSay();
echo '<br/>';
$test4 = resolve('Test');
echo $test4->testSay();
}
我们可以通过这4种形式进行调用输出
app()函数和resolve 等同于别名函数
function resolve($name, array $parameters = [])
{
return app($name, $parameters);
}
function app($abstract = null, array $parameters = [])
{
if (is_null($abstract)) {
return Container::getInstance();
}
return Container::getInstance()->make($abstract, $parameters);
}
Facades类
我们将我们的类实现静态方法,我们通过Facades
之后可以轻易将我们的类转成任意静态方法,例如刚才的例子:TestFacade::testSay()
此类可定义任意位置,需要继承 Illuminate\Support\Facades\Facade
,原理很简单,调用PHP的__callStatic()
<?php
namespace App;
use Illuminate\Support\Facades\Facade;
class TestFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'Test';
}
}
相关知识: call()和 callStatic() 方法
- 当对象访问不存在的方法时,__call()方法会被自动调用
- 当对象访问不存在的静态方法时,__callStatic()方法会被自动调用
门面
我们在Facades类 定义了,我们还可以将它转成门面,相当于一个别名,这样我们就可以直接写引入类,即可找到别名
config/app.php
'aliases' => [
'Test6'=>\App\TestFacade::class
]
use Test6;
class HomeControlle extends Controller
{
public function index(Test $test1)
{
echo $test1->testSay();
echo '1.<br/>';
$test2=app('Test');
echo $test2->testSay();
echo '2.<br/>';
$test3=app()->make('Test');
echo $test3->testSay();
echo '3.<br/>';
$test4 = resolve('Test');
echo $test4->testSay();
echo '4.<br/>';
echo TestFacade::testSay();
echo '5.<br/>';
echo Test6::testSay();
echo '6.<br/>';
}
}
这样我们的输出结果是一样的。
版权提示
1.除了标识原创之外,其他可能来源于网友的分享,仅供学习使用2.如您发现侵犯了您的权利,请联系我们删除
3.转载必须带本文链接,否则你将侵权
4.关于会员或其发布的相关内容均由会员自行提供,会员依法应对其提供的任何信息承担全部责任,本站不对此承担任何法律责任
评论区 (0)
没有记录
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!