IoC Container trong PHP (Phần 2)

Tram Ho

Trong bài viết này, chúng ta sẽ tiến hành implement IoC Container.

1. Initalize project

Bên trên là cấu trúc thư mục khởi tạo project của chúng ta. Lần lượt nội dung của các file sẽ như sau :

composer.json

src/Illuminate/Container/Container.php

src/Illuminate/Contracts/Container/Container.php

tests/Container/ContainerTest.php

Đó là nội dung của 4 files chính của chúng ta trong bài viết lần này.

Nếu ta chạy unit test tại thời điểm này, chắc chắn là test fail (RED), và đây là điều chúng ta mong muốn, theo đúng tinh thần của TDD.

Công việc cần làm của chúng ta bây giờ là làm cho test pass (GREEN).

2. Implement Container

2.1. Closure resolution

Chúng ta sẽ implement dạng đơn giản nhất của container, là nó chỉ thực hiện resolve các closure (function) được binding. Về ý tưởng thì tương đối đơn giản.

bind this with that.
make that then give me this

Ý tưởng implement là ta sẽ có một mảng bindings[] để lưu trữ tất cả các bindings.

Việc thực hiện khá là đơn giản, giờ thì thử chạy lại unit test của chúng ta nào

Hurray! Passed!

2.1. Singleton

…To Be Continued!

Cảm ơn các bạn đã đọc bài viết, hẹn gặp lại ở bài viết tiếp theo, chúng ta sẽ tiến hành implement dạng singleton của binding nhé!


Code: https://github.com/tunt-1890/phpioccontainer

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo