PHP में निम्नलिखित को देखते हुए:PHP में कंटेनर ऑब्जेक्ट की विधि का संदर्भ लें?
<?php
class foo {
public $bar;
function __construct() {
"Foo Exists!";
}
function magic_bullet($id) {
switch($id) {
case 1:
echo "There is no spoon! ";
case 2:
echo "Or is there... ";
break;
}
}
}
class bar {
function __construct() {
echo "Bar exists";
}
function target($id) {
echo "I want a magic bullet for this ID!";
}
}
$test = new foo();
$test->bar = new bar();
$test->bar->target(42);
मैं अगर यह संभव है 'बार' क्लास 'जादुई गोली' 'foo' वर्ग की विधि कॉल करने के लिए सोच रहा हूँ। 'बार' उदाहरण 'foo' उदाहरण द्वारा निहित है, लेकिन इसके साथ माता-पिता/बाल संबंध में नहीं है। वास्तविकता में, मेरे पास कई अलग-अलग "बार" वर्ग हैं जो "foo" एक सरणी में हैं, प्रत्येक एक अंतिम परिणाम के लिए "magic_bullet" फ़ंक्शन को पास करने के इच्छुक होने से पहले $ आईडी से कुछ अलग कर रहा है, इसलिए संरचना को छोड़कर वर्ग संबंधों में परिवर्तन, क्या 'कंटेनर' उदाहरण की विधि तक पहुंच बनाना संभव है?
शानदार! यह बार सेटअप के लिए foo उदाहरण में पॉइंटर जोड़ने के लिए अन्य सुझावों के ऊपर, मेरे सेटअप के लिए काम करता है, क्योंकि कई 'बार' उदाहरणों को मानते हुए, मैं बार उदाहरण के अंदर foo इंस्टेंस की प्रतियां नहीं चाहता (अतिरिक्त मेमोरी उपयोग, प्लस यदि मूल $ परीक्षण उदाहरण कुछ बदलता है जो 'magic_bullet' के व्यवहार को संशोधित करता है, तो सभी प्रतियां पुरानी हो जाएंगी), मुझे एक संदर्भ ('$ this-> pointer_to_foo = &$foo;',' $-- pointer_to_foo = $ foo नहीं चाहिए ')। – MidnightLightning
ध्यान दें कि आप PHP5 के साथ काम कर रहे हैं (आप हैं, यदि __construct का उपयोग कन्स्ट्रक्टर के रूप में करते हैं), तो हस्ताक्षर की कोई आवश्यकता नहीं होनी चाहिए: डिफ़ॉल्ट –
हाहा द्वारा संदर्भ द्वारा ऑब्जेक्ट पास किए जाते हैं, मुझे नहीं पता कि मैं PHP 5 शैली को कैसे चूक गया रचनाकार, मैंने बस 'var' के उपयोग और विधियों पर पहुंच/दृश्यता संशोधक की कमी की कुंजी बंद कर दी। @MidnightLightning यदि आप वास्तव में PHP 5 का उपयोग कर रहे हैं, पास्कल मार्टिन सही है - आपको संदर्भ ऑपरेटर की आवश्यकता नहीं है। मैंने बनाए गए किसी भी भ्रम के लिए खेद है। –