سلام استاد عزیز
ما در بخش 102 اموزش لاراول که به بحث service provider و service container میپردازیم و یک مثال از سوختگیری خودرو برامون زدید یک کلاس fuelconsumption ساختیم و ارگومان ورودی متد calc کنترلر رو از نوع اون کلاس در نظر گرفتیم که مجبور شدیم تزریق وابستگی رو از طریق متد register سرویس پرووایدری که خودمون ساختیم انجام بدیم سپس یک ارگومان دیگه از نوع fueltype درنظر گرفتیم ولی در test2serviceprovider نیومدیم تزریق وابستگی انجام بدیم fueltype رو.علتش رو میخام بدونم. سوالم اینه که چرا وقتی fueltype رو تزریق وابستگی نکردیم لاراول بهش خطا نمیگیره . شاید جوابش اینه که چون fueltype وابسته هست به fuelconsumption ولی وقتی متد ارگومان رو میگییره هنوز نمیدونه که وابسته هست به ارگومان های قبلی یا بعدی یا نه. پس اصولا باید خطا بگیره ولی نمیگیره علتش چیه؟
CarController
<?php
namespace App\Http\Controllers;
use App\Additions\FuelType;
use App\Service\FuelConsumption;
use Illuminate\Http\Request;
class CarController extends Controller
{
public function calc(FuelConsumption $fuelConsumption, FuelType $fuelType)
{
$fuelType=$fuelType->premium();
dd($fuelConsumption->refueling(50));
}
}Test2ServiceProvider
class Test2ServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(FuelConsumption::class,function(){
return new FuelConsumption('BMW');
});
}
}FuelConsumption
class FuelConsumption
{
private $model;
private $extra;
public function __construct($model)
{
$this->model=$model;
$this->extra=0;
}
public function refueling($liter)
{
return [
'distance' => $liter * 10+$this->extra,
'model'=>$this->model,
'extra'=>$this->extra,
];
}
public function premiumGasoline($extra)
{
$this->extra=$extra;
}
}
FuelType
class FuelType
{
private $fuelConsumption;
public function __construct(FuelConsumption $fuelConsumption)
{
$this->fuelConsumption=$fuelConsumption;
}
public function premium()
{
$this->fuelConsumption->premiumGasoline(50);
}
}با سلام خدمت شما
دقیقا وقتی شما شی رو میسازید به اون متغییر دسترسی دارید و دیگه نیازی نیست جداگانه تزریق کنید