2012-03-06 4 views
7

मान लीजिए मैं:मैं एक सरणी से PHP में एक वस्तु को भरने करते

class A{ 
public $one; 
public $two; 
} 

और मूल्यों के साथ एक सरणी:

array('one' => 234, 'two' => 2) 

वहाँ के साथ एक भरा का एक उदाहरण के लिए एक रास्ता है सरणी से सही मूल्य स्वचालित रूप से?

+0

* स्वचालित रूप से * परिभाषित करें। क्या 'ए' का उदाहरण पहले से मौजूद है या इसे बनाया जाना चाहिए? यदि हां, उस उदाहरण के निर्माता को कॉल किए बिना या बिना? – hakre

+1

डुप्लिकेट [PHP: एक सरणी को StdClass ऑब्जेक्ट में कैसे चालू करें]? http://stackoverflow.com/questions/1885160/php-how-to-turn-an-array-into-a-stdclass-object –

+0

@ Rob2211: मैंने भी खोज की, लेकिन 'ए'' StdClass' नहीं है । – hakre

उत्तर

13

आपको इसके लिए एक फ़ंक्शन लिखना होगा। पीएचपी get_object_varsDocs है, लेकिन कोई समकक्ष सेट:

function set_object_vars($object, array $vars) { 
    $has = get_object_vars($object); 
    foreach ($has as $name => $oldValue) { 
     $object->$name = isset($vars[$name]) ? $vars[$name] : NULL; 
    } 
} 

उपयोग: (मान लीजिए एक आईडी या पासवर्ड thoses रंगमंच की सामग्री में है)

$a = new A(); 
$vars = array('one' => 234, 'two' => 2); 
set_object_vars($a, $vars); 
+0

शानदार! दूसरे 2 आयाम चरणों के लिए समान प्रभाव प्राप्त करने के लिए मुझे क्या बदलने की आवश्यकता होगी? $ वस्तु [ 'एक्स'] [ 'y'] [ 'z']; –

0

हां वहाँ है।

आप विधि के माध्यम से पास का उपयोग कर सकते हैं।

उदाहरण के लिए:

class A { 
    public $one, $tow; 
    function __construct($values) { 
     $this->one = $values['one'] ?: null; 
     $this->two = $values['two'] ?: null; 
    } 
} 

$a = new A(array('one' => 234, 'two' => 2)); 
+0

शायद ही स्वचालित। –

+0

@ Rob2211 सच है, लेकिन यह सबसे अच्छा है जिसे मैं सोच सकता हूं। – Neal

2

आप विशेषताओं की थोक की स्थापना के लिए अनुमति देना चाहते हैं, तो आप भी उन्हें एक संपत्ति के रूप में स्टोर कर सकते हैं। यह आपको कक्षा के भीतर थोड़ा बेहतर करने की अनुमति देता है।

class A{ 
    protected $attributes = array(); 
    function setAttributes($attributes){ 
    $this->attributes = $attributes; 
    } 

    public function __get($key){ 
    return $this->attributes[$key]; 
    } 

} 
1

@hakre संस्करण काफी अच्छा है, लेकिन खतरनाक है।

मुझे लगता है कि करने के लिए डिफ़ॉल्ट व्यवहार को बदलने होगा:

function set_object_vars($object, array $vars) { 
    $has = get_object_vars($object); 
    foreach ($has as $name => $oldValue) {   
     array_key_exists($vars[$name]) ? $object->$name =$vars[$name] : NULL; 
    } 
} 
यहाँ

, पिछले गुण है कि $ में नहीं हैं वार्स सरणी प्रभावित नहीं हैं।
और यदि आप उद्देश्य पर पर एक प्रस्ताव सेट करना चाहते हैं, तो आप कर सकते हैं।

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