2011-12-03 57 views
8

Giả sử tôi có hai tệp, mỗi tệp có một lớp. Làm thế nào tôi có thể nhận được tên tập tin mà lớp con là, trong lớp cha mẹ?lấy tên tệp của lớp mở rộng

Tập 2 (lớp trẻ):

class B extends A{ 

} 

Tập 1:

class A{ 

    final protected function __construct(){ 
    // here I want to get the filename where class B is, 
    // or whatever class is the child 
    } 

} 
+2

Các lớp được khởi tạo như thế nào với trình xây dựng được bảo vệ đó? – Phil

+0

Bạn muốn lớp cha mẹ, kỳ diệu biết vị trí của một lớp con tùy ý nào đó khi nó được xây dựng? Điều đó không dễ dàng, và thực sự không có mục đích gì cả. Chính xác những gì bạn đang cố gắng để làm? Có thể có một cách tốt hơn để hoàn thành mục tiêu cuối cùng thực tế của bạn. –

Trả lời

15

Không thực sự chắc chắn mục đích gì nó phục vụ, nhưng ở đây bạn đi:

class A{ 

    final protected function __construct(){ 
    $obj = new ReflectionClass($this); 
    $filename = $obj->getFileName(); 
    } 

} 
+0

Sẽ không [ReflectionObject] (http://php.net/manual/en/class.reflectionobject.php) là sự lựa chọn đúng không? – Phil

+0

Bạn nên thay đổi khả năng truy cập của hàm tạo thành 'public'. – webbiedave

+2

@webbiedave Thật khó để nói làm thế nào OP tạo ra các đối tượng với các nhà xây dựng được bảo vệ nhưng họ có thể có lý do của họ. Có lẽ họ có một phương pháp công cộng, tĩnh nhà máy trên 'A' – Phil

3

Bạn có thể gian lận và sử dụng debug_backtrace:

class A { 
    final protected function __construct() { 
    $stacktrace = @debug_backtrace(false); 
    $filename = $stacktrace[0]['file']; 
    } 
} 
Các vấn đề liên quan