2013-08-07 25 views
5

PHP dosyasının yerini, çalışma zamanında değerlendirmek mümkün mü? Sihirli sabit __DIR__ benzer bir şey arıyorum, ancak çalışma zamanında, geç bağlama olarak değerlendirildi. self ve static ile Benzer farkı:PHP __DIR__ çalışma süresini değerlendirdi (geç bağlama)?

__DIR__ ~ self 
    ??? ~ static 

Amacım her mirasçı sınıf için ayrı ayrı değerlendirilecektir __DIR__ kullanarak, soyut bir sınıfta bir yöntemi tanımlar. Örnek:

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

Açıkçası, bu sorun yalnızca Parent ve Heir farklı dizinlere içindedir oluşur. Lütfen, bunu hesaba kat. Ayrıca, çeşitli varisi sınıflarında defalarca getDir tanımlayan olmak ve seçenek görünmüyor biz miras neden bu

cevap

6

Sen Veli sınıfının getDir yönteminde aşağıdaki kodu ekleyebilirsiniz ... var

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

Ebeveyniniz sınıfı o yardımcı olacaktır umuduyla bu

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

gibi görünecektir.

+0

Bu harika ... Başka bir şey, insanlar? Temizleyici daha iyi tasarlar. –

+1

Ayrıca, ReflectionObject: 'return dirname (new \ ReflectionObject ($ this)) -> getFileName()); –