2012-07-22 10 views
9

यह काम करने के लिए प्रतीत नहीं होता:क्या मुझे प्रतिबिंब के साथ एक निजी संपत्ति का मूल्य मिल सकता है?

Property privateProperty does not exist

:

$ref = new ReflectionObject($obj); 

if($ref->hasProperty('privateProperty')){ 
    print_r($ref->getProperty('privateProperty')); 
} 

यह अगर पाश में हो जाता है, और फिर एक त्रुटि फेंकता है |

$ref = new ReflectionProperty($obj, 'privateProperty') या तो काम नहीं करता है ...

documentation page सूचियों में कुछ स्थिरांक, IS_PRIVATE भी शामिल है। मैं कभी भी इसका उपयोग कैसे कर सकता हूं यदि मैं किसी निजी संपत्ति का उपयोग नहीं कर सकता हूं?

+0

क्यों आपको लगता है कि क्या ज़रूरत है? – zerkms

+1

IS_PRIVATE और othe constants getProperties (बहुवचन - नहीं मिलता प्रॉपर्टी) विधि –

उत्तर

26
class A 
{ 
    private $b = 'c'; 
} 

$obj = new A(); 

$r = new ReflectionObject($obj); 
$p = $r->getProperty('b'); 
$p->setAccessible(true); // <--- you set the property to public before you read the value 

var_dump($p->getValue($obj)); 
+0

के लिए लागू होते हैं आपका उदाहरण काम करता प्रतीत होता है, लेकिन मेरा नहीं है :(ऐसा हो सकता है क्योंकि मेरी कक्षा एक बाल वर्ग है? – Alex

+0

@Alex: देखें उनके बीच अंतर। निश्चित रूप से कुछ ऐसा है जो आपने – zerkms

+0

@Alex को याद किया है: हाँ, 'निजी' केवल उन वर्गों के लिए दृश्यमान है जो वे बनाए गए थे। लेकिन उस स्थिति में 'हैप्रोपर्टी' 'झूठी ' – zerkms

1

getProperty एक अपवाद फेंकता है, त्रुटि नहीं। महत्व है, है तो आप इसे संभाल कर सकते हैं, और अपने आप को एक if बचाने:

$ref = new ReflectionObject($obj); 
$propName = "myProperty"; 
try { 
    $prop = $ref->getProperty($propName); 
} catch (ReflectionException $ex) { 
    echo "property $propName does not exist"; 
    //or echo the exception message: echo $ex->getMessage(); 
} 

सभी निजी गुण प्राप्त करने के लिए, का उपयोग $ref->getProperties(IS_PRIVATE);

+0

हेड अप, 'IS_PRIVATE' 'प्रतिबिंबप्रोपर्टी :: IS_PRIVATE' हो –

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