2011-09-05 20 views
5

मुझे आश्चर्य है कि कैसे मैं PHP में एक वस्तु संपत्ति, जैसे नाम बदल सकते हैं:PHP - ऑब्जेक्ट प्रॉपर्टी का नाम कैसे बदलें?

<?php 
    $obj = new stdclass(); 
    $obj->a = 10; // will be renamed 
    $obj->b = $obj->a; // rename "a" to "b", somehow! 
    unset($obj->a); // remove the original one 

यह PHP5.3 में काम नहीं करता, (donno पहले के संस्करणों के बारे में) के बाद से वहाँ $obj->b और करने के लिए सौंपा $obj->a के एक संदर्भ होगा इसलिए $obj->a को अनसेट करके, $obj->b का मान शून्य हो जाएगा। कोई विचार कृपया? http://codepad.org/QnXvueic

जब आप $obj->a अनसेट, तो आप सिर्फ संपत्ति निकालने के लिए, आप मूल्य को स्पर्श नहीं करते:

+1

पीएचपी संस्करण 5.3.4 अपने कोड $ obj को क्रियान्वित करने के बाद: वस्तु (stdClass) # 1 (1) {[ "बी"] => पूर्णांक (10)} – Fivell

+2

यह एक संदर्भ नहीं है। [यह उत्तर] देखें (http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129) PHP चर के लेखन चर और संदर्भों के विवरण के लिए। .. – ircmaxell

उत्तर

5

आपका कोड ठीक से कार्य $obj->b10 निष्पादन के बाद है। यदि मान किसी अन्य चर द्वारा उपयोग किया जाता है, तो यह ऑर्डर वैरिएबल में छूटा हुआ है।

+0

यह आसान है। यह अन्य भाषाओं में प्रतिबिंब और अन्य फैंसी सामान करने के लिए बचाता है। –

+0

धन्यवाद! यह कमजोर है क्यों मुझे संपत्ति को अनसेट करने के बाद NULL मिलता है = O –

0
<?php  
$obj = new stdclass(); 
$obj->a = 10; // will be renamed 
$obj->b = $obj->a; // rename "a" to "b", somehow! 
unset($obj->a); // remove the original one 
var_dump($obj->b); //10 Works fine 
+0

यह नाम नहीं है, यह एक प्रति है। यह दो बार स्मृति -> ए पर कब्जा करेगा। बस "नामकरण" के रूप में कह रहे हैं अक्सर बड़े डेटासेट को संभालने वाले डेवलपर्स के लिए केवल कुछ महत्वपूर्ण है। – John

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