मैं इस अवैध संपत्ति को अवैध नाम से कैसे एक्सेस करूं?


115

मैं एक PHP वर्ग का उपयोग कर रहा हूं जिसे किसी ने BaseCamp API के साथ इंटरफेस करने के लिए लिखा है।

मैं जो विशेष कॉल कर रहा हूं वह एक टूडू सूची में उन वस्तुओं को पुनः प्राप्त करना है, जो ठीक काम करती हैं।

मेरी समस्या यह है, मुझे यकीन नहीं है कि todo-itemsजिस वस्तु को लौटाया गया है उसकी संपत्ति तक कैसे पहुंचें । यहाँ लौटी हुई वस्तु का var_dump है:

object(stdClass)[6]
  public 'completed-count' => string '0' (length=1)
  public 'description' => string 'Description String' (length=89)
  public 'id' => string '12345' (length=7)
  public 'milestone-id' => string '' (length=0)
  public 'name' => string 'Error Reports' (length=13)
  public 'position' => string '1' (length=1)
  public 'private' => string 'false' (length=5)
  public 'project-id' => string '58904' (length=7)
  public 'tracked' => string 'false' (length=5)
  public 'uncompleted-count' => string '1' (length=1)
  public 'todo-items' => 
    object(stdClass)[3]
      public 'todo-item' => 
        object(stdClass)[5]
          public 'completed' => string 'false' (length=5)
          public 'content' => string 'content string here' (length=133)
          public 'created-on' => string '2009-04-16T20:33:31Z' (length=20)
          public 'creator-id' => string '23423' (length=7)
          public 'id' => string '234' (length=8)
          public 'position' => string '1' (length=1)
          public 'responsible-party-id' => string '2844499' (length=7)
          public 'responsible-party-type' => string 'Person' (length=6)
          public 'todo-list-id' => string '234234' (length=7)
  public 'complete' => string 'false' (length=5)

मैं todo-itemsइस ऑब्जेक्ट के हिस्से तक कैसे पहुंच सकता हूं ?

जवाबों:


261
<?php
$x = new StdClass();
$x->{'todo-list'} = 'fred';
var_dump($x);

तो, $object->{'todo-list'}उप-वस्तु है। यदि आप इसे इस तरह सेट कर सकते हैं, तो आप इसे भी उसी तरह पढ़ सकते हैं:

echo $x->{'todo-list'};

एक अन्य संभावना:

$todolist = 'todo-list';
echo $x->$todolist;

यदि आप इसे एक सरणी में बदलना चाहते हैं, जो थोड़ा और आसानी से हो सकता है (यानी स्पष्ट $ret['todo-list']पहुंच), तो यह कोड Zend_Config से लगभग वर्बेटिम लिया जाता है और आपके लिए परिवर्तित हो जाएगा।

public function toArray()
{
    $array = array();
    foreach ($this->_data as $key => $value) {
        if ($value instanceof StdClass) {
            $array[$key] = $value->toArray();
        } else {
            $array[$key] = $value;
        }
    }
    return $array;
}

24
यद्यपि यह छोटा और मीठा है (और मैं क्या सलाह दूंगा), आप इसे चर के माध्यम से भी कर सकते हैं:$todolist='todo-list'; $x->$todolist
क्रिश्चियन

PHP> 5.5 के साथ बहुत देर से प्रतिक्रिया , बेहतर समाधान हैं। या तो castएक सरणी के लिए वस्तु, या कोशिश करो get_object_vars()
ओवेन बेर्स्फोर्ड

1
@christian बहुत अच्छा! लेकिन $ x की कोशिश करें -> {$ todolist}
जेम्स बेली

@JamesBailey, सही है। किसी कारण से, उस समय मुझे लगा कि यह केवल PHP के नए संस्करणों में उपलब्ध है, लेकिन यह स्पष्ट रूप से थोड़ी देर के बाद से है: 3v4l.org/nf15N
ईसाई

28

इस सरल तरीके की कोशिश करो!

$obj = $myobject->{'mydash-value'};
$objToArray = array($obj);

4
भविष्य के पाठकों के लिए स्पष्टीकरण के साथ कोड नमूने के साथ अच्छे उत्तर हैं। जबकि यह प्रश्न पूछने वाला व्यक्ति आपके उत्तर को समझ सकता है, यह समझाते हुए कि आप इस पर कैसे पहुंचे, यह अनगिनत अन्य लोगों की मदद कर सकता है।
Stonz2

2
ओह, यह असली जवाब है। मैं हमेशा के लिए एक 'के साथ एक वस्तु संपत्ति के नाम का उपयोग करने की कोशिश कर रहा था।' उस में और यह सही है कि साफ!
रसेलमेनिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.