2012-11-21 16 views
18

मैं अभी भी ओओपी सीख रहा हूं, इसलिए यह संभव भी नहीं हो सकता है (हालांकि मुझे आश्चर्य होगा अगर), मुझे किसी अन्य कक्षा विधि को कॉल करने में कुछ मदद चाहिए।PHP: किसी अन्य वर्ग की विधि को कॉल करना

ClassA I में उदाहरण के लिए इस विधि का उपयोग:

function getName() 
{ 
    return $this->name; 
} 
अब ClassB से

, मैं फोन करने के लिए ClassA के getName() चाहते हैं, मुझे लगता है कि कैसे करते हो (अलग फ़ाइल, लेकिन एक ही निर्देशिका में)? मैंने बस include() करने की कोशिश की लेकिन यह काम नहीं करता है।

धन्यवाद!

+0

कोड साझा करें आप getName() – Evert

+0

पर कॉल करने के लिए उपयोग कर रहे हैं क्या कक्षा बी के पास कक्षा ए (जैसे पदानुक्रमित) से कोई संबंध है? यदि ऐसा है, तो कक्षा बी कक्षा ए का विस्तार कर सकता है और आपके पास कक्षा ए के कार्यों तक पहुंच होगी। यदि नहीं, तो क्या आप अपनी दो वस्तुओं का थोड़ा और वर्णन कर सकते हैं (वे क्या प्रतिनिधित्व करते हैं)। – Mike

+0

बात यह है कि, कक्षा ए पहले से ही एक और कक्षा (सरल_html_dom जिसे मैंने नेट से डाउनलोड किया है) का विस्तार कर रहा है, इसलिए मैं नहीं चाहता (मुझे पता भी नहीं कि मैं कर सकता हूं) कक्षा ए का विस्तार करता हूं जो पहले से ही कुछ अन्य वर्ग – Ryan

उत्तर

40
//file1.php 
<?php 

class ClassA 
{ 
    private $name = 'John'; 

    function getName() 
    { 
    return $this->name; 
    } 
} 
?> 

//file2.php 
<?php 
    include ("file1.php"); 

    class ClassB 
    { 

    function __construct() 
    { 
    } 

    function callA() 
    { 
     $classA = new ClassA(); 
     $name = $classA->getName(); 
     echo $name; //Prints John 
    } 
    } 

    $classb = new ClassB(); 
    $classb->callA(); 
?> 
+0

यह वही है जो आप चाहते हैं, भले ही यह वर्तमान में नकारात्मक हो। –

+4

ध्यान दें कि आप आसानी से अपने 'बी' वर्ग का परीक्षण नहीं कर सकते हैं, क्योंकि आपने कड़ाई से' ए 'वर्ग के साथ जोड़ा है। – PeeHaa

+0

धन्यवाद! यह मेरे लिए काम किया! – Ryan

5

आप विरासत या एक उदाहरण विधि के बिना ClassA

class ClassA { 
    public function getName() { 
     echo $this->name; 
    } 
} 

class ClassB extends ClassA { 
    public function getName() { 
     parent::getName(); 
    } 
} 

ClassB भीतर ClassA का एक उदाहरण है या ClassB वारिस की आवश्यकता है, तो आप एक स्थिर विधि

class ClassA { 
    public static function getName() { 
    echo "Rawkode"; 
    } 
} 
के लिए ClassA आवश्यकता होगी

--- अन्य फ़ाइल ---

echo ClassA::getName();

तुम सिर्फ वर्ग का एक उदाहरण से विधि कॉल करने के लिए देख रहे हैं: समाधान आप चुनते हैं की परवाह किए बिना ---

class ClassA { 
    public function getName() { 
    echo "Rawkode"; 
    } 
} 

--- अन्य फ़ाइल

$a = new ClassA(); 
echo $a->getName(); 

, require 'ClassA.php की जरूरत है ।

14

यदि वे अलग वर्ग आप निम्नलिखित की तरह कुछ कर सकते हैं:

class A 
{ 
    private $name; 

    public function __construct() 
    { 
     $this->name = 'Some Name'; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 
} 

class B 
{ 
    private $a; 

    public function __construct(A $a) 
    { 
     $this->a = $a; 
    } 

    function getNameOfA() 
    { 
     return $this->a->getName(); 
    } 
} 

$a = new A(); 
$b = new B($a); 

$b->getNameOfA(); 

क्या मैं पहली बार A वर्ग का एक नया उदाहरण बनाने है इस उदाहरण में किया है। और उसके बाद मैंने B कक्षा का एक नया उदाहरण बनाया है जिसमें मैं A का निर्माता कन्स्ट्रक्टर में पास करता हूं। अब B$this->a का उपयोग कर A कक्षा के सभी सार्वजनिक सदस्यों तक पहुंच सकता है।

यह भी ध्यान दें कि B कक्षा के अंदर A कक्षा को तुरंत चालू नहीं करता क्योंकि इसका मतलब यह होगा कि मैं दो वर्गों को दोगुना जोड़ता हूं।

  1. इकाई अन्य वर्ग
+0

यह भी अच्छा है लेकिन आप दो अलग-अलग फाइलें निर्दिष्ट करते हैं। इसलिए आपको केवल उस वर्ग को शामिल करना याद रखना है जिसे आप "नया बी()", आदि –

+0

के साथ तत्काल करना चाहते हैं, मैंने प्रश्न को और अधिक पढ़ा है कि मैं किसी अन्य वर्ग के सदस्य को कैसे एक्सेस कर सकता हूं, मैं फ़ाइल कैसे शामिल कर सकता हूं, लेकिन हाँ सही हैं। यद्यपि फ़ाइलों को स्वत: लोड करना कुछ है जो सुविधा इमो के लिए कुछ करना चाहिए। – PeeHaa

+0

हाँ निश्चित रूप से। हालांकि इस चरण में मुझे लगता है कि ऑटोलोडिंग सीखने की प्रक्रिया को अधिभारित कर सकती है ... शायद। –

-1

फ़ाइल 1

class ClassA { 

    public $name = 'A'; 

    public function getName(){ 
     return $this->name; 
    } 

} 

फ़ाइल 2

include("file1.php"); 
class ClassB { 

    public $name = 'B'; 

    public function getName(){ 
     return $this->name; 
    } 

    public function callA(){ 
     $a = new ClassA(); 
     return $a->getName(); 
    } 

    public static function callAStatic(){ 
     $a = new ClassA(); 
     return $a->getName(); 
    } 

} 

$b = new ClassB(); 
echo $b->callA(); 
echo $b->getName(); 
echo ClassB::callAStatic(); 
के लिए अपने B वर्ग बाहर A वर्ग
  • स्वैप का परीक्षण: यह यह मुश्किल के लिए बनाता है
  • +0

    देखें [मेरी टिप्पणी] (http://stackoverflow.com/questions/13503734/php-calling-another-class-method/13503805#comment18482402_13503769) @ कोडिंगबिज के उत्तर के तहत। – PeeHaa

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