2013-08-07 2 views
5

어떻게하면 런타임에 평가되는 PHP 파일의 위치를 ​​가져올 수 있습니까? 나는 마법 상수 __DIR__과 비슷한 것을 찾고 있지만, 런타임에는 평가판 바인딩으로 평가됩니다. selfstatic와 비슷한 차이는 :PHP __DIR__ 평가 된 런타임 (후기 바인딩)?

__DIR__ ~ self 
    ??? ~ static 

내 목표는 각 상속인 클래스에 대해 각각 평가 될 것이다 __DIR__를 사용하여 추상 클래스의 메서드를 정의한다. 예 :

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); 
    } 
} 

분명히이 문제는 경우에만 ParentHeir 다른 디렉토리에 발생합니다. 이 점을 고려하십시오. 또한, 다양한 후계자 수업에 또 다시 getDir을 정의하는 것은하고 옵션을하지 않는 것 우리가 상속을 가지고, 그 이유는

답변

6

당신은 부모 클래스의 getDir 방법에 다음 코드를 추가 할 수 있습니다 ..입니다

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

귀하의 부모 클래스는 도움이 될 것입니다 희망이

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

처럼 보일 것입니다.

+0

이것은 멋지다. 다른 것은 무엇입니까? 더 깔끔한 디자인이 좋습니다. –

+1

ReflectionObject를 사용할 수도 있습니다 : 'return dirname (new \ ReflectionObject ($ this)) -> getFileName()); –