2012-02-19 39 views
17

Có bất kỳ khung công tác tiêm phụ thuộc tương tự hoặc tương tự nào trong PHP không? Nếu không có bất kỳ khuôn khổ tiêm phụ thuộc tốt nào trong PHP?Các khuôn khổ giống như các khuôn khổ tiêm phụ thuộc trong PHP

Tôi phải triển khai cùng một mã trong PHP những gì tôi đã triển khai trong Java và tôi sử dụng Guice trong dự án Java của mình. Vì vậy, nó sẽ được dễ dàng hơn để thực hiện phiên bản PHP, nếu nó được sử dụng khuôn khổ tương tự.

+0

Câu hỏi này trả lời trên http://stackoverflow.com/questions/52072/inversion-of-control-container-for-php –

Trả lời

9

(Gửi bài bình luận của tôi như là một phản ứng)

Hãy nhìn vào bản sao của tôi Guice tên Sharbat (có nghĩa là nước). API khá giống với của Guice.

Nó đã khá nhiều tất cả mọi thứ bạn cần:

  • Constructor tiêm (không yêu cầu chú thích @Inject)
  • tiêm Dòng (không phân biệt tầm nhìn, sử dụng @Inject (foobar))
  • Phương pháp tiêm (bất kể khả năng hiển thị, yêu cầu chú thích @Inject)
  • tiêm nhà cung cấp (đối với các lĩnh vực thông qua @InjectProvider (T = Foobar), cho các phương pháp thông qua @Provider (T = foobar, param = fooBarProvider)
  • Scopes (có thể thực hiện một tùy chỉnh một)
  • AOP (phương pháp đánh chặn)
  • Thông tư phụ thuộc

Xem file readme ví dụ sử dụng.

+0

Từ README.md của Sharbat: "TODO: Tài liệu và kiểm tra đơn vị" - những điều quan trọng mà họ đã bỏ ra ... chưa kể đến bản cập nhật cuối cùng là khoảng 04/2012 ... –

5

Tôi thích trọng lượng nhẹ Aura.Di. Readme trong trang dự án github được liên kết cung cấp cho bạn đủ thông tin để bắt đầu sau một vài phút. Nó phụ thuộc vào 5.3 mặc dù.

Tôi không nghĩ rằng việc sử dụng chú thích của Guice có thể được triển khai trong PHP trong thời gian chạy mà không có tác động hiệu suất rất nặng, nếu đó là yêu cầu chính của bạn.

+0

Chú thích được hỗ trợ thông qua docblocks - giống như trong java (xdoclets) thời gian dài trước đây. Doctrine không hỗ trợ cho họ (http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/basic-mapping.html) –

+0

Tôi không thể nghĩ ra một dự án bằng chú thích trong thời gian chạy, chỉ cần nghĩ về docblox mà không cần phải cực kỳ nhanh. Cảm ơn ví dụ của bạn nhưng tôi (ngây thơ và không có dữ liệu để sao lưu nó lên) vẫn tin rằng nó có thể là một hit hiệu suất cho việc sử dụng không biên dịch. – chelmertz

+0

Vâng, đó là lý do tại sao bạn nên lưu trữ dữ liệu này trong quá trình sản xuất. –

3

Tôi muốn giới thiệu bạn pimple. Nó rất dễ sử dụng.
Có thú vị presentation về container tiêm phụ thuộc này (tác giả của bài thuyết trình này là tác giả của mụn).

+0

+1 cho các trang trình bày từ fabien –

+0

Tôi bắt đầu sử dụng Pimple vì nó có vẻ là một cách hay để bắt đầu với DiC trong PHP ... sau khoảng một tuần với nó, tôi đã đi đến kết luận rằng Pimple là một Service Locator nhiều hơn là Dependency Injection container, vì mọi dịch vụ bạn đăng ký với nó phải được kết nối bằng tay ... –

3

Dưới đây là một khuôn khổ phụ thuộc để thêm vào danh sách: PHP-DI

Nó là một container có nghĩa là rất thực tế sử dụng, ước sau trên cấu hình (do đó bạn kết thúc bằng văn bản cấu hình ít hơn nhiều so với khác hộp đựng).

It features dependency injection qua chú thích (đó là tùy chọn) và cấu hình tối thiểu:

class Foo { 
    /** 
    * @Inject 
    * @var Bar 
    */ 
    private $bar; 

    public function hello() { 
     return $this->bar->sayHello(); 
    } 
} 

Hãy nhận biết rằng chú thích là không bắt buộc tuy nhiên, nếu bạn không thích nó, bạn không cần phải sử dụng nó.

Rất dễ sử dụng và tích hợp với Zend Framework và Symfony rất tốt.

(từ chối trách nhiệm: Tôi làm việc trên khung này)

+0

PHP-DI 4 của bạn hoàn toàn tuyệt vời! Bạn có thể vui lòng đóng góp: http://stackoverflow.com/questions/24076299/circular-dependency-injecting-objects-that-are-directly-depended-on-each-other –

+0

@IliaRostovtsev Cảm ơn bạn :) –

2

Check-out

rg \ injektor là một container dependency injection tinh vi cho PHP đã được lấy cảm hứng từ Guice. Không giống như các thùng chứa dựa trên phản xạ khác rg \ injektor bao gồm một trình tạo lớp nhà máy mà bạn có thể sử dụng để ngăn chặn việc sử dụng phản chiếu trên sản xuất.

Tính năng này có tính năng Xây dựng, Tiêm tài sản, Lớp nhà cung cấp, Quản lý đối tượng, Đặt tên và một vài thứ khác. Nó được kiểm tra đơn vị và có sẵn thông qua Composer.