2013-08-07 30 views
5

Bằng cách nào đó có thể lấy vị trí của tệp PHP, được đánh giá khi chạy không? Tôi đang tìm kiếm một cái gì đó tương tự như hằng số ma thuật __DIR__, nhưng được đánh giá ở thời gian chạy, như là một ràng buộc muộn. chênh lệch tương tự với selfstatic:PHP __DIR__ được đánh giá thời gian chạy (ràng buộc muộn)?

__DIR__ ~ self 
    ??? ~ static 

Mục tiêu của tôi là xác định một phương pháp trong một lớp trừu tượng, sử dụng __DIR__ đó sẽ được đánh giá tương ứng cho mỗi lớp người thừa kế. Ví dụ:

abstract class Parent { 
    protected function getDir() { 
    // return __DIR__; // does not work 
    return <<I need this>>; // 
    } 
} 

class Heir extends Parent { 
    public function doSomething() { 
    $heirDirectory = $this->getDir(); 
    doStuff($heirDirectory); 
    } 
} 

Rõ ràng, vấn đề này chỉ xảy ra nếu ParentHeir là trong các thư mục khác nhau. Xin vui lòng, đưa vào tài khoản này. Ngoài ra, việc xác định getDir hơn và hơn nữa trong các lớp thừa kế khác nhau dường như không thể và lựa chọn, đó là lý do tại sao chúng tôi có thừa kế ...

Trả lời

6

Bạn có thể thêm đoạn mã sau vào phương pháp getDir của lớp chuyên

$reflector = new ReflectionClass(get_class($this)); 
$filename = $reflector->getFileName(); 
return dirname($filename); 

Lớp cha mẹ của bạn sẽ giống như thế này

abstract class Parent { 
    protected function getDir() { 
     $reflector = new ReflectionClass(get_class($this)); 
     $filename = $reflector->getFileName(); 
     return dirname($filename); 
    } 
} 

Hy vọng nó sẽ giúp ích.

+0

Điều này thật tuyệt ... Bất kỳ điều gì khác, mọi người? Các thiết kế sạch càng tốt. –

+1

Bạn cũng có thể sử dụng ReflectionObject: 'return dirname (new \ ReflectionObject ($ this)) -> getFileName());' –

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