मैं कक्षाओं के स्थिर गुणों के लिए बैकअप/पुनर्स्थापना कार्य करने की कोशिश कर रहा हूं। मैं प्रतिबिंब वस्तुओं getStaticProperties()
विधि का उपयोग कर सभी स्थिर गुणों और उनके मूल्यों की एक सूची प्राप्त कर सकता हूं। यह private
और public static
गुण और उनके मूल्य दोनों प्राप्त करता है।क्या प्रतिबिंब कक्षाओं का उपयोग कर एक निजी/संरक्षित स्थिर संपत्ति सेट करने का कोई तरीका है?
समस्या यह है कि प्रतिबिंब वस्तुओं setStaticPropertyValue($key, $value)
विधि के साथ गुणों को पुनर्स्थापित करने का प्रयास करते समय मुझे एक ही परिणाम नहीं मिल रहा है। private
और protected
चर इस विधि को दिखाई नहीं दे रहे हैं क्योंकि वे getStaticProperties()
हैं। असंगत लगता है।
क्या प्रतिबिंब वर्गों का उपयोग करके निजी या संरक्षित स्थैतिक संपत्ति सेट करने का कोई तरीका है या उस मामले के लिए किसी अन्य तरीके से?
class Foo {
static public $test1 = 1;
static protected $test2 = 2;
public function test() {
echo self::$test1 . '<br>';
echo self::$test2 . '<br><br>';
}
public function change() {
self::$test1 = 3;
self::$test2 = 4;
}
}
$test = new foo();
$test->test();
// Backup
$test2 = new ReflectionObject($test);
$backup = $test2->getStaticProperties();
$test->change();
// Restore
foreach ($backup as $key => $value) {
$property = $test2->getProperty($key);
$property->setAccessible(true);
$test2->setStaticPropertyValue($key, $value);
}
$test->test();
यह बहुत अधिक सही है, आप संभवतः '$ refProperty-> setValue (शून्य, 'नया मान') का उपयोग करना चाहते हैं; 'चर के नए मान को सेट करने के लिए। – tplaner
धन्यवाद @evolve। जब तक मैं setValue() का उपयोग नहीं करता तब तक काम नहीं कर रहा था। धन्यवाद! – dqhendricks
@dhehendricks कोई समस्या नहीं, अच्छा सवाल है। – tplaner