Tôi nghe mọi người nói về tiêm phụ thuộc và lợi ích của nó tất cả các thời gian, nhưng tôi không thực sự hiểu nó.Làm thế nào tôi có thể sử dụng "Dependency Injection" trong các hàm php đơn giản, và tôi có nên bận tâm không?
Tôi tự hỏi nếu đó là giải pháp cho vấn đề "Tôi vượt qua các kết nối cơ sở dữ liệu dưới dạng đối số mọi lúc".
Tôi đã thử đọc mục nhập wikipedia trên đó, nhưng ví dụ được viết bằng Java vì vậy tôi không hiểu rõ sự khác biệt mà nó đang cố gắng làm rõ. (http://en.wikipedia.org/wiki/Dependency_injection).
Tôi đọc bài viết phụ thuộc-tiêm-trong-php này (http://www.potstuck.com/2009/01/08/php-dependency-injection/), và dường như mục tiêu là không chuyển phụ thuộc trực tiếp vào đối tượng, nhưng để tạo ra một đối tượng cùng với việc tạo ra nó phụ thuộc. Tôi không chắc chắn làm thế nào để áp dụng đó trong một bối cảnh chức năng sử dụng php, mặc dù.
Ngoài ra, đây là tiêm phụ thuộc sau và tôi có nên cố gắng thực hiện tiêm phụ thuộc trong ngữ cảnh chức năng không?
Version 1: (các loại mã mà tôi tạo ra, nhưng không thích, mỗi ngày)
function get_data_from_database($database_connection){
$data = $database_connection->query('blah');
return $data;
}
Version 2: (không cần phải thông qua một kết nối cơ sở dữ liệu, nhưng có lẽ không phụ thuộc ? tiêm)
function get_database_connection(){
static $db_connection;
if($db_connection){
return $db_connection;
} else {
// create db_connection
...
}
}
function get_data_from_database(){
$conn = get_database_connection();
$data = $conn->query('blah');
return $data;
}
$data = get_data_from_database();
Phiên bản 3: (việc tạo ra các "đối tượng"/dữ liệu tách biệt, và mã cơ sở dữ liệu vẫn còn, vì vậy có lẽ điều này sẽ được tính là dependency injection)
function factory_of_data_set(){
static $db_connection;
$data_set = null;
$db_connection = get_database_connection();
$data_set = $db_connection->query('blah');
return $data_set;
}
$data = factory_of_data_set();
?
Bất cứ ai cũng có một nguồn lực tốt hoặc chỉ là cái nhìn sâu sắc mà làm cho phương pháp và lợi ích -crystal-rõ ràng?
Bạn không cần chuyển kết nối db của mình - chỉ cần khai báo nó là toàn cầu trong hàm 'global $ database_connection; ' –