Làm cách nào để thêm một phần không gian tên PHP vào thư viện mà không vi phạm mã hiện có?


10

Công ty của tôi đã tạo ra một khung công tác PHP mô-đun trong nhiều năm, bắt đầu từ lâu trước khi PHP 5.3 thêm các không gian tên. Gần đây, chúng tôi đã quyết định bắt đầu sử dụng các không gian tên trong mã mới của thư viện và cuối cùng chúng tôi dự định sẽ không gian tên mã cũ. Tuy nhiên, chúng tôi có một vài vấn đề chúng tôi đang cố gắng xác định xem việc thêm các không gian tên vào một cơ sở mã trước v5.3 không phải là một ý tưởng hay:

  1. Tôi có thể đặt tên cho một lớp nhưng cũng có thể nhập (sử dụng) không gian tên toàn cục để tất cả các lớp toàn cầu không cần \tiền tố không?
  2. Nếu chúng ta đặt tên cho một lớp hiện có trong thư viện của mình, làm thế nào chúng ta có thể ngăn chặn tất cả các dự án hiện tại phá vỡ ngay khi nâng cấp khung? Ví dụ, thư viện có thể thay đổi tên của lớp ThemeEnginethành \module\theme\ThemeEngine, nhưng các trang web hiện có gọi ThemeEnginemà không có bất kỳ sửa đổi mã nào không? Nếu vậy, mã đó sẽ trông như thế nào?

Câu trả lời:


2
  1. Đáng buồn thay, bạn hoàn toàn không thể sử dụng các không gian tên, chỉ các lớp: http://www.php.net/manual/en/lingu.namespaces.importing.php . Chỉnh sửa: Bạn có thể nhập các lớp từ không gian tên toàn cầu, giống như họ đã làm với ArrayObject trong một trong các ví dụ.

  2. Bạn có thể có một phần toàn cầu của các câu lệnh sử dụng sao cho tất cả các lớp tồn tại trước đó, trong không gian tên toàn cầu, về mặt lý thuyết sẽ tìm thấy các lớp tốt. Về mặt lý thuyết ...

Chúng tôi đang ở trong cùng một chiếc thuyền với bạn. Chúng tôi có một số mã cũ không sử dụng không gian tên, nhưng sử dụng faker không gian tên (như Zend_Db_Table ...) và chúng tôi có một số mã cũ thậm chí không có không gian tên giả. Có lẽ chúng ta sẽ đi theo cùng một lộ trình, nhưng chúng ta vẫn cần kiểm tra xem liệu có thể không. Chúc may mắn!


1

Phải, những gì tôi đã làm cuối cùng là sử dụng - 'sử dụng' để nhập các lớp riêng lẻ mà tôi cần

ví dụ thay vì thêm '/' vào trước mọi thứ như:

\DateTime()

Tôi đã thêm vào dưới không gian tên của mình

namespace MyProject;
use DateTime;

...
DateTime();     //without \
...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.