2010-12-05 16 views
10

तो उदाहरण के लिए मेरे पास यह कोड है:PHP: ऑब्जेक्ट वैरिएबल कैसे बनाएं?

class Object{ 
    public $tedi; 
    public $bear; 
    ...some other code ... 
} 

अब जब आप देख सकते हैं कि इस वर्ग के अंदर सार्वजनिक चर हैं। मैं क्या करना चाहता हूं कि इन चरों को एक गतिशील तरीके से बनाना है, एक फ़ंक्शन के साथ:

private function create_object_vars(){ 

    // The Array what contains the variables 
    $vars = array("tedi", "bear"); 

    foreach($vars as $var){ 
     // Push the variables to the Object as Public 
     public $this->$var; 
    } 
} 

तो मुझे गतिशील तरीके से सार्वजनिक चर कैसे बनाना चाहिए?

+0

अपने प्रश्न क्या है? –

+0

क्षमा करें @ पेक्का, हालांकि यह स्पष्ट है लेकिन मैंने इसे अंत तक संलग्न किया :) – Adam

+0

जिज्ञासा से, आप यह क्यों कर रहे हैं? – aib

उत्तर

7

हाँ, आप यह कर सकते हैं।

आप काफी सही है - यह यह करना चाहिए:

private function create_object_vars(){ 

    // The Array of names of variables we want to create 
    $vars = array("tedi", "bear"); 

    foreach($vars as $var){ 
     // Push the variables to the Object as Public 
     $this->$var = "value to store"; 
    } 
} 

ध्यान दें कि यह variable variable naming का उपयोग, जो कुछ पागल और खतरनाक काम कर सकते हैं बनाता है!

टिप्पणियों के मुताबिक, इस तरह के सदस्य सार्वजनिक होंगे - मुझे यकीन है कि संरक्षित/निजी चर बनाने का एक तरीका है, लेकिन यह शायद आसान नहीं है (उदाहरण के लिए आप इसे विस्तार में सी ज़ेंड एपीआई के माध्यम से कर सकते हैं)।

+0

वास्तव में?: डी ओह शांत! – Adam

+0

लेकिन आपके स्निपेट में, कोई सार्वजनिक नहीं है, क्या यह डिफ़ॉल्ट रूप से सार्वजनिक होगा? – Adam

+0

@CIRK - इस तरह से बनाए गए हां सदस्य चर डिफ़ॉल्ट रूप से सार्वजनिक होंगे (PHP 4 में सभी सदस्य सार्वजनिक थे) - मुझे यकीन नहीं है कि गैर-सार्वजनिक चर बनाने का कोई आसान तरीका है या नहीं। –

5

वैकल्पिक रूप से, आप अपने ऑब्जेक्ट को ArrayObject से भी प्राप्त कर सकते हैं। इसलिए यह सरणी-व्यवहार और कुछ विधियों को प्राप्त करता है जो गुणों को इंजेक्ट करने में आसान बनाते हैं।

class YourObject extends ArrayObject { 

    function __construct() { 
     parent::__construct(array(), ArrayObject::PROPS_AS_ARRAY); 
    } 

    function create_object_vars() { 
     foreach ($vars as $var) { 

      $this[$var] = "some value"; 

     } 
    } 

गुण तो $this->var और $this["var"] वैसे ही है, जो या उपयोग के मामले नहीं के अनुरूप बन सकता है के रूप में उपलब्ध हो जाएगा। गुण सेट करने के लिए वैकल्पिक विधि $this->offsetSet("VAR", "some value"); होगी।

बीटीडब्ल्यू, परिवर्तनीय चर के बारे में कुछ भी बुरा नहीं है। वे एक उचित भाषा निर्माण कर रहे हैं, जैसा कि ArrayObject का पुन: उपयोग किया जाएगा।

31
$vars = (object)array("tedi"=>"bear"); 

या

$vars = new StdClass(); 
$vars->tedi = "bear"; 
+0

ओह! धन्यवाद! StdClass वह है जो मुझे बस चाहिए। – zx1986

+0

@ bfg9k कृपया मुझे इस पर एक सहायता हाथ उधार दें http://stackoverflow.com/questions/42295574/how-to-convert-8209-array-object-variant-to-vt-variant –

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