2012-08-03 26 views
16

Tôi tự hỏi liệu trong trường hợp tôi đang mở rộng một lớp đã sử dụng từ khóa ở trên nó để sử dụng không gian tên cụ thể - tôi có cần phải thêm một 'sử dụng' khác trên lớp kế thừa để sử dụng cùng một không gian tên không? Tình hình như thế này:PHP: Lớp mở rộng có cần một 'sử dụng' khác để gọi vùng tên không?

namespace Core; 

use System\Plugin; 

class Front extends Application { } 

và bây giờ trong điều khiển, được gọi là trực tiếp mà không cần không gian tên (sử dụng đường dẫn đầy đủ):

use System\Plugin; 

class PageController extends Front { } 

hoặc nó sẽ làm việc mà không 'sử dụng' như tốt và cho phép tôi để sử dụng không gian tên System \ Plugin:

class PageController extends Front { } 

?

Trả lời

18

Không, bạn cần câu lệnh "sử dụng" trong cả hai tệp. Sử dụng là từ khóa cấp tệp và không bị ảnh hưởng bởi kế thừa.

Xem scoping rules for importing và hộp nhỏ mô tả những gì tôi đã nói ở cuối trang hướng dẫn.

+0

Rõ ràng nếu trong lớp Mặt trận, tôi đã khởi tạo một đối tượng từ bên trong vùng tên Plugin thì tôi có thể sử dụng nó mà không cần sử dụng 'System \ Plugin' trong lớp thừa kế. –

+0

Tất nhiên, và bạn không phải lúc nào cũng cần một tuyên bố sử dụng. Sử dụng không gian tên đủ điều kiện cũng hoạt động. – Lusitanian

+6

Thật tuyệt vời (ví dụ: DRYer) nếu các lớp có thể kế thừa các câu lệnh 'use' từ các lớp cha – hohner

Các vấn đề liên quan