2010-01-31 20 views
6

ठीक है मेरी समस्या इस प्रकार है;एक निश्चित वर्ग के सभी वस्तुओं लिस्टिंग

मैं एक वर्ग है कि इस निर्माता के साथ एक पालतू जानवर के वर्णन करता है;

public function __construct($name, $type, $age) 

तो मुझे क्या करना चाहते हैं पालतू वस्तुओं के एक नंबर बनाने के लिए, तो मैं इस वर्ग के सभी भागों से सभी विशेषताओं मुद्रित करने के लिए इतना है कि यह की तरह this

कुछ क्या है लग रहा है चाहता हूँ इसके बारे में जाने का सबसे अच्छा तरीका? मुझे पता है कि किसी ऑब्जेक्ट के चर के माध्यम से पुनरावृत्ति कैसे करें, लेकिन मेरी मुख्य चिंता यह है कि किसी निश्चित वर्ग की सभी वस्तुओं के माध्यम से कैसे पुनरावृत्ति करें। अगर कोई मुझे किसी चीज़ का कोड उदाहरण दिखा सकता है, तो मुझे यह अच्छा लगेगा, खासकर यदि सरणी के उपयोग के बिना ऐसा करने का कोई तरीका है।

किसी भी मदद की सराहना की जाती है!

+0

डुप्लिकेट: http://stackoverflow.com/questions/475569/get-all-instances-of-a-class-in-php/483094 – troelskn

उत्तर

1

आम तौर पर आप, उदाहरणों आपके द्वारा बनाया गया पर नज़र रखने के कुछ रास्ता है की उम्मीद करेंगे हो सकता है हो सकता है एक सरणी या किसी प्रकार की कक्षा में।

लेकिन तर्क की खातिर, आप get_defined_vars() साथ वर्तमान क्षेत्र में सभी चर की जांच कर सकता, रिकर्सिवली कुछ इस तरह के साथ किसी भी सरणियों खोज या आप पाते हैं वस्तुओं,:

function findInstancesOf($classname, $vars) 
{ 
    foreach($vars as $name=>$var) 
    { 
     if (is_a($var, classname)) 
     { 
      //dump it here 
      echo "$name is a $classname<br>"; 

     } 
     elseif(is_array($var)) 
     { 
      //recursively search array  
      findInstancesOf($classname, $var); 
     } 
     elseif(is_object($var)) 
     { 
      //recursively search object members 
      $members=get_object_var($var);  
      findInstancesOf($classname, $members); 
     } 
    } 
} 

$vars = get_defined_vars(); 
findInstancesOf('MyPetClass', $vars); 
5

आप, वर्ग निर्माता, एक स्थिर सरणी कि इस प्रकार के सभी तत्वों रखता है $this संलग्न कर सकते हैं:

class Pet { 
    public static $allPets = array(); 
    function __construct($name, $type, $age) { 
     self::$allPets[] = $this; 
     // more construction 
    } 
} 

सभी पालतू पशु वस्तुओं की सूची को Pet::$allPets में है।

1

मैं इसे अपने संरचना पर निर्भर करता है लगता है, लेकिन I'd किसी अन्य वस्तु/वर्ग कि सभी उत्पन्न पालतू वस्तुएं शामिल है, इसलिए मुझे लगता है कि के माध्यम से लूप होगा।

+0

शायद यह कैसे वस्तु बनाने के लिए का एक उदाहरण में मदद मिलेगी ? – DForck42

1

ठीक है, आप एक कस्टम विकल्प बनाने बनाने के लिए और स्थैतिक चर का उपयोग प्रत्येक बनाया वर्ग का एक उदाहरण स्टोर करने के लिए

Class Pet 
{ 
    public static $pets = array(); 
    public static create($name, $type, $age) 
    { 
     $pet = new Pet($name, $type, $age); 
     self::$pets[] = $pet; 
     return $pet; 
    } 
} 
Pet::createPet("test", "test", 42); 
Pet::createPet("test", "test", 42); 
Pet::createPet("test", "test", 42); 

foreach(Pet::$pets as $pet) 
{ 
    echo $pet->name; 
} 
1

मैं एक foreach होगा पाश

foreach($myobject as $key => $pent) 
{ 
echo $key; 
echo $pent; 

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