2010-03-18 11 views
6

Tôi đang làm việc về việc tính lại mã của phần tải tệp cấu hình trong PHP. Trước đó tôi đã sử dụng nhiều tệp 'ini' nhưng bây giờ tôi dự định đi cho một tệp XML duy nhất sẽ chứa tất cả các chi tiết cấu hình của dự án. Vấn đề là, nếu ai đó muốn tập tin cấu hình trong ini hoặc DB hoặc bất cứ điều gì khác và không phải là một mặc định (trong trường hợp này XML), mã của tôi nên xử lý phần đó.Trình quản lý cấu hình cho PHP

Nếu ai đó muốn dùng tùy chọn cấu hình khác như ini, anh ta sẽ phải tạo tệp ini tương tự tệp cấu hình XML của tôi và trình quản lý cấu hình của tôi sẽ chăm sóc mọi thứ như phân tích cú pháp, lưu trữ trong bộ nhớ cache. Đối với điều đó, tôi cần một cơ chế cho phép nói giao diện thích hợp cho dữ liệu cấu hình của tôi, nơi lưu trữ dữ liệu bên dưới có thể là bất kỳ thứ gì (XML, DB, ini, v.v.), tôi không muốn nó phụ thuộc vào cửa hàng cơ bản này và bất cứ lúc nào trong tương lai có thể mở rộng sang các định dạng tệp khác.

Trả lời

5

Giả sử bạn đang muốn sử dụng một lớp học để xử lý tất cả điều này, bạn có 3 lựa chọn:

  1. Có một lớp cơ sở gọi là một cái gì đó như thế nào, sau đó ReadConfigurationBase 3 lớp thực hiện, ReadConfigurationXML, ReadConfigurationINI, và ReadConfigurationDatabase và bạn sẽ phải chọn một trong những quyền
  2. Tương tự như trên, nhưng sử dụng một nhà máy để lựa chọn, dựa tắt của cái gì đó trôi qua dễ dàng. như nếu bạn vượt qua config.xml nó sẽ biết để trở ReadConfigurationBase triển khai sử dụng ReadConfigurationXML
  3. Có một lớp được gọi là ReadConfiguration và nó hoạt động như bước 2, nhưng tạo, chứa và sở hữu, 3 lớp khác.

3 lớp không phải cơ sở chỉ đơn giản là biết cách đọc loại tệp cấu hình đó và chuyển thông tin theo cách tổng quát. suy nghĩ dọc theo các dòng của một giao diện: Bạn biết bạn có thể nhận được dữ liệu, nhưng bạn không quan tâm như thế nào.

Tôi muốn đề xuất tùy chọn 3, vì nó sẽ làm cho cuộc sống dễ dàng nhất. Bạn sẽ phải thực hiện một chút sửa đổi mỗi lần bạn muốn thêm phương thức lưu trữ, nhưng điều đó sẽ chỉ thêm một chút vào lớp ReadConfiguration.

Có một cách bạn có thể làm cho nó hoạt động 100%, nhưng điều đó sẽ làm phức tạp vấn đề và tôi không nghĩ bạn thực sự cần nó cho việc này.

+0

+1 để hiển thị cách tự làm. –

+0

Cảm ơn câu trả lời. Bạn có thể xây dựng tùy chọn thứ ba chi tiết hơn một chút không? – Jack

3

Hãy xem Zend_Config. Nó cung cấp bộ điều hợp cho mảng, Xml và Inis. Giống như tất cả các thành phần trong Zend Framework, nó có thể được sử dụng tách biệt khỏi Khung còn lại. Ngay cả khi bạn không muốn sử dụng nó, nó cũng được thiết kế và bạn có thể nhận được một vài ý tưởng cho trình quản lý cấu hình của riêng bạn từ nó.

+0

+1 để đề cập đến ZF. –