2012-11-21 19 views
18

Hala OOP'u öğreniyorum, bu mümkün olmayabilir (eğer şaşkın olsa da), başka bir sınıf yöntemini çağırmak için yardıma ihtiyacım var. ClassA I Örneğin PHP: Başka bir sınıfın çağrılması 'yöntem

bu yöntemi vardır:

function getName() 
{ 
    return $this->name; 
} 
ClassB Şimdi

, ben bundan nasıl yapacağız ClassA 'ın getName() aramak istediğiniz (farklı dosyaya, ama aynı dizinde)? Sadece bir include() yapmayı denedim ama bu işe yaramıyor.

Teşekkürler!

+0

kodu paylaş getName() – Evert

+0

numaralı telefonu aramak için kullandınız B sınıfının A sınıfı (hiyerarşik gibi) ile ilişkisi var mı? Eğer öyleyse, B Sınıfı A sınıfını genişletebilir ve A sınıfı işlevlere erişebilirsiniz. Eğer değilse, iki nesneyi biraz daha açıklayabilir misiniz? – Mike

+0

İşin aslı, A sınıfı zaten bir başka sınıf genişletiyor (internetten indirdiğim simple_html_dom) bu yüzden zaten istemiyorum (yapıp yapamayacağımı bile bilmiyorum) Sınıf A'yı genişletiyor zaten var olan diğer bir sınıf – Ryan

cevap

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

Şu anda negatif olsa bile, istediğiniz bu. –

+4

"B" sınıfınızı kolayca test edemeyeceğinizi unutmayın, çünkü A 'sınıfına sıkı sıkıya bağlısınız. – PeeHaa

+0

Teşekkürler Bu benim için çalıştı! – Ryan

5

Sen miras veya bir örnek yöntemi olmadan

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

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

Classa

ClassB içinde ClassA bir örneğini varsa veya ClassB devralan olması gerekir, bir statik yöntemini

class ClassA { 
    public static function getName() { 
    echo "Rawkode"; 
    } 
} 
olması Classa gerekiyordu

--- diğer dosya ---

echo ClassA::getName();

sadece sınıfının bir örneğinden yöntemini çağırmak için arıyorsanız: Ne olursa olsun seçtiğiniz çözümün ---

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

--- diğer dosya

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

, require 'ClassA.php gereklidir .

14

onlar aşağıdaki gibi bir şey yapabilirsiniz ayrı sınıflar ise: İlk A sınıfının yeni bir örneğini oluşturmak olduğunu bu örnekte ne yaptın

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(); 

. Ve bundan sonra, A örneğini yapıcıya ilettiğim B sınıfının yeni bir örneğini oluşturdum. Şimdi B, $this->a kullanarak A sınıfının tüm genel üyelerine erişebilir.

Ayrıca, A sınıfını B sınıfının içine dahil etmediğimi de unutmayın, çünkü bu, iki sınıfı sıkı bir şekilde eşleştirdiğim anlamına gelir.

  1. ünite başka bir sınıfta
+0

Bu bir tane de iyi ama iki farklı dosya belirtin. Yani sadece "yeni B()", vb ile başlatmak istediğiniz sınıfı dahil etmek zorunda hatırlamak zorunda, vb –

+0

Ben bir dosyayı nasıl ekleyebilirim başka bir sınıfın bir üyesine nasıl erişebilirim gibi daha fazla soru okumak, ama evet haklısın Her ne kadar otomatik yükleme dosyaları, herkesin kolaylık sağlamak için yapması gereken bir şeydir. – PeeHaa

+0

Evet, kesinlikle. Bu aşamada, otomatik yüklemenin öğrenme sürecine aşırı yüklenebileceğini düşünüyorum ... belki de. –

-1

Dosya 1

class ClassA { 

    public $name = 'A'; 

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

} 

Dosya 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(); 
için B sınıf A sınıftan dışarı
  • takas sınamak: Bu zor hale getirir
  • +0

    @ codingbiz'in cevabı altında [yorumum] (http://stackoverflow.com/questions/13503734/php-calling-another-class-method/13503805#comment18482402_13503769) konusuna bakın. – PeeHaa

    İlgili konular