আমি কীভাবে এই অবজেক্ট সম্পত্তি একটি অবৈধ নাম সহ অ্যাক্সেস করব?


115

আমি বেসচ্যাম্প এপিআইয়ের সাথে ইন্টারফেস করতে কেউ লিখেছেন এমন একটি পিএইচপি ক্লাস ব্যবহার করছি।

আমি যে বিশেষ কলটি করছি তা হ'ল টুডো তালিকার আইটেমগুলি পুনরুদ্ধার করা, যা ভাল কাজ করে।

আমার সমস্যাটি হ'ল, আমি নিশ্চিত না যে কীভাবে 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
খ্রিস্টান

খুব দেরিতে প্রতিক্রিয়া , পিএইচপি> 5.5 সহ আরও ভাল সমাধান রয়েছে। হয় castঅ্যারেতে অবজেক্ট, বা চেষ্টা করুন get_object_vars()
ওভেন বেরেসফোর্ড

1
@ ক্রিশ্চিয়ান খুব সুন্দর! তবে $ x -> {d টডোলিস্ট try
জেমস বেইলি

@ জামেসবায়েল, ঠিক আছে কিছু কারণে, যে সময়ে আমি এই শুধুমাত্র পিএইচপি এর নতুন সংস্করণে উপলব্ধ ছিল, কিন্তু তা সেখানে কিছুক্ষণ দৃশ্যত যেহেতু হয়েছে: 3v4l.org/nf15N
খ্রিস্টান

28

এই সহজ উপায় চেষ্টা করুন!

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

4
ভবিষ্যতের পাঠকদের জন্য একটি ব্যাখ্যা সহ কোডের নমুনাগুলির সাথে ভাল উত্তর রয়েছে। এই প্রশ্ন জিজ্ঞাসা করা ব্যক্তি আপনার উত্তরটি বুঝতে পারে, আপনি কীভাবে এখানে এসেছেন তা ব্যাখ্যা করে অগণিত অন্যদের সহায়তা করতে পারে।
স্টোনজ 2

2
ওহ এটি সত্যই উত্তর। আমি একটি 'দিয়ে' কোনও সামগ্রীর সম্পত্তি নাম অ্যাক্সেস করার জন্য চিরতরে চেষ্টা করেছিলাম। এটি এবং এই যে ঠিক আপ পরিষ্কার!
রাসেলম্যানিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.