Dependency Injection là kỹ thuật một đối tượng cung cấp phụ thuộc cho đối tượng khác. Đây là mẫu thiết kế phần mềm tránh hard-code phụ thuộc, cho phép thay đổi phụ thuộc tại runtime và compile time.
Các cách tiêm phổ biến
Constructor Injection
Tiêm qua constructor của lớp.
<?php
class Programmer {
private $skills;
public function __construct($skills) {
$this->skills = $skills;
}
public function totalSkills() {
return count($this->skills);
}
}
$skills = ["PHP", "JQUERY", "AJAX"];
$p = new Programmer($skills);
echo $p->totalSkills(); // 3
?>
Setter Injection
Tiêm qua phương thức setter.
<?php
class Profile {
private $language;
public function setLanguage($language) {
$this->language = $language;
}
}
$profile = new Profile();
$languages = ["Hindi", "English", "French"];
$profile->setLanguage($languages);
?>
Lợi ích
- Thêm phụ thuộc mới dễ dàng bằng setter mới, không ảnh hưởng code cũ.
- Dễ test (mock dependency).
- Giảm coupling giữa các lớp.