2011-08-31 9 views
0

Comment je peux exécuter la méthode $ this-> ob-> getVar() à l'intérieur de la classe B fonction C ici? Je reçois non. Ai-je dû transférer la chaîne au constructeur?variables de transfert entre la classe A et B

<?php 


class A{ 

    public $tabb = array('1'=>'one', '2'=>'two'); 
    public $index; 

    public function setVar($v){ 

    $this->index = $v; 

    } 

    public function getVar(){ 

    return $this->index; 

    } 

    public function arr(){ 

    return $this->tabb; 

    } 

} 


class B{ 

    public $tab; 

    public function __construct($var){ 

    $this->ob=new A; 

    $this->tab = $var; 

    } 

    public function C(){ 

    return $this->D($this->tab, $this->ob->getVar()); 

     } 

    public function D($l, $j){ 

    if(is_array($l) && isset($j)){ 

     print 'yes'; 

    } else { 

    print 'no'; 

    } 

    } 

} 

$obb = new A; 
$obb->setVar('onetwo'); 
$k = $obb->arr(); 
$obbb = new B($k); 
$obbb->C(); 


?> 
+0

Appelez '$ this-> ob-> getVar()' dans cette méthode. Ce code est parfaitement valide – zerkms

+0

le même effet que le transfert de tableau pour le constructeur – xyz

Répondre

1

En premier lieu, pour le bien de votre convention de classe B doit déclarer une variable privée de obj $, mais ce n'est pas nécessaire en PHP. Deuxièmement, votre classe B crée simplement une nouvelle instance de A dans son constructeur. Donc vous avez deux classes A différentes. Une fois à l'intérieur B n'a jamais sa propriété d'index remplie.

Si vous voulez avoir l'objet A créé en dehors de l'objet B, vous devrez passer dans comme ceci:

$obbb = new B($k, $obb); 

Alors maintenant votre nouveau constructeur B est quelque chose comme ceci:

public function __construct($var, $someObject){ 

    if (!empty($someObject)) { 
     $this->ob = $someObject; 
    } 
    else { 
     $this->ob=new A; 
    } 

    $this->tab = $var; 

} 
+0

merci je peux utiliser la référence, l'héritage ici, la méthode getInstance? – xyz

+0

ce travail, mais encore je transfère mes variables du constructeur;) – xyz

+0

je vais apprendre une autre méthode – xyz

Questions connexes