1、创建服务类

Student.php
namespace AppServiceSchool;
class Student
{
protected $TafficTool;
function __construct(WayToSchool $foot)
{
$this->TafficTool = $foot;
}
public function goToSchool()
{
$this->TafficTool->goToSchool();
}
}
WayToSchool.php
namespace AppServiceSchool;
interface WayToSchool
{
public function goToSchool();
}
Foot.php
namespace AppServiceSchool;
class Foot implements WayToSchool
{
public function goToSchool()
{
// TODO: Implement goToSchool() method.
echo "walk to school";
}
}
2、创建service provider
namespace AppProviders;
use AppServiceSchool;
use IlluminateSupportServiceProvider;
class StudentServiceProvider extends ServiceProvider
{
protected $defer = false;
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->singleton('student',function(){
return new SchoolStudent(new SchoolBike());//不使用WayToSchoolServiceProvider.php 默认的 Foot,实现个性化的需求
});
//$this->app->singleton('Student',AppServiceSchoolStudent::class);//使用自动注入解决依赖
}
}
WayToSchool.php
namespace AppProviders;
use AppServiceSchool;
use IlluminateSupportServiceProvider;
class WayToSchoolServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(SchoolWayToSchool::class,'AppServiceSchoolFoot');//接口 AppServiceSchoolWayToSchool 默认使用AppServiceSchoolFoot去实例化
}
}
3、写到配置文件 config/app.php 的 providers数组
AppProvidersWayToSchoolServiceProvider::class,
AppProvidersStudentServiceProvider::class,
4、使用
routes/web.php
Route::get('std', function () {
app('student')->goToSchool();
})
输出:by bike to school