2013-08-07 8 views
5

क्या यह किसी भी तरह से PHP फ़ाइल का स्थान प्राप्त करना संभव है, रनटाइम पर मूल्यांकन किया गया है? मैं जादू निरंतर __DIR__ के समान कुछ मांग रहा हूं, लेकिन देर से बाध्यकारी के रूप में रनटाइम पर मूल्यांकन किया। self और static साथ इसी तरह के अंतर: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); 
    } 
} 

जाहिर है, इस समस्या तब होती है केवल यदि Parent और Heir अलग निर्देशिका में हैं। कृपया इसे ध्यान में रखें। इसके अलावा, विभिन्न वारिस कक्षाओं में अधिक से अधिक परिभाषित करने 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 ($ यह)) -> getFileName());' –

संबंधित मुद्दे