Dependency Injection (DI) คือกระบวนการที่อ็อบเจกต์หนึ่งจัดหา dependencies (การพึ่งพา) ให้อ็อบเจกต์อีกตัวหนึ่ง Dependency Injection เป็นแนวทางออกแบบซอฟต์แวร์ที่ช่วยหลีกเลี่ยงการ hard-code dependencies และทำให้สามารถเปลี่ยน dependencies ได้ทั้งในขณะคอมไพล์และรันไทม์
มีหลายวิธีในการ inject อ็อบเจกต์ นี่คือวิธีที่นิยมใช้:
Constructor Injection
ในวิธีนี้ เราส่งอ็อบเจกต์ผ่าน Constructor ของคลาส
ตัวอย่าง
<?php
class Programmer {
private $skills;
public function __construct($skills){
$this->skills = $skills;
}
public function totalSkills(){
return count($this->skills);
}
}
$createskills = array("PHP", "JQUERY", "AJAX");
$p = new Programmer($createskills);
echo $p->totalSkills();
?>
ผลลัพธ์
3
Setter Injection
ส่งอ็อบเจกต์เข้าคลาสผ่านฟังก์ชัน Setter
ตัวอย่าง
<?php
class Profile {
private $language;
public function setLanguage($language){
$this->language = $language;
}
}
$profile = new Profile();
$language = array("Hindi","English","French");
$profile->setLanguage($language);
?>
ประโยชน์ของ Dependency Injection
- การเพิ่ม dependency ใหม่ง่ายเพียงแค่เพิ่ม setter method ใหม่ ซึ่งไม่รบกวนโค้ดเดิม