2012-05-29 18 views
7

Tôi đang cố gắng tạo một đối tượng của một tên lớp được tạo động. Tôi đang sử dụng không gian tên và lớp mà tôi muốn khởi tạo nằm trong cùng một không gian tên.Lập trình lớp theo chuỗi trong không gian tên hiện tại

Để examplify, điều này hoạt động tốt:

namespace MyNamespace; 

new MyClass; // MyNamespace\MyClass instantiated 

Trong khi điều này không:

namespace MyNamespace; 

$class = 'MyClass'; 
new $class; // Class 'MyClass' not found 

Đây có phải là một lỗi hay tôi làm điều gì sai?

Trả lời

13

Khi bạn sử dụng chuỗi có new, bạn cần phải cung cấp tên lớp học đầy đủ.

Bạn có thể làm điều này với __NAMESPACE__:

$fullclass = __NAMESPACE__ . '\\' . $class; 
new $fullclass; 

Xem tài liệu cho các new operator__NAMESPACE__ liên tục kỳ diệu.

+0

Xin chào, có vẻ hợp lệ. Bạn có thể liên kết với nguồn của mình để tham khảo không? Thanks :-) – jgivoni

+0

@jgivoni Đã thêm vào câu trả lời của tôi. – lonesomeday

+0

Rất tốt, cảm ơn các liên kết. Nhưng bây giờ tôi tự hỏi, khi bạn nói "tên lớp học đầy đủ", không nên bắt đầu bằng '\' quá? Có lẽ hàng đầu '\' có thể được ngụ ý trong các trường hợp như thế này? – jgivoni

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