2016-03-24 1 views
0

Qu'est-ce qui ne va pas dans les classes ci-dessus? Fondamentalement, je veux avoir accès à partir de classes Audi, Ford, Opel à tous ou les trois classes (méthodes publiques). Par exemple dans l'une des méthodes d'objet Audi pour avoir accès aux méthodes publiques Opel comme:Comment étendre correctement certaines classes php pour avoir accès depuis la classe enfant à toutes les méthodes publiques d'une autre classe enfant?

[dans Audi] function otherPrices() {return $ this-> opel-> getPrice(); }

class Car { 
    function Car() {} 
} 
class Model extends Car { 
    public $audi; 
    public $ford; 
    public $opel; 

    function Model() { 
     parent::Car(); 

     $this->audi = new Audi(); 
     $this->ford = new Ford(); 
     $this->opel = new Opel(); 
    } 

} 
class Factory { 
    public $audi; 
    public $ford; 
    public $opel; 
    function Factory(){ 
     $model = new Model(); 

     $this->audi = $model->audi; 
     $this->ford = $model->ford; 
     $this->opel = $model->opel; 
    } 
} 
class Audi extends Factory { 
    public $price = 10; 
    function Audi() {} 
    function audiVsOpel(){ 
     return "A:" . ($this->price - $this->opel->price); 
    } 
} 
class Ford extends Factory { 
    public $price = 12; 
    function Ford() {} 
    function fordVsAudi(){ 
     return "B:" . ($this->price - $this->audi->price); 
    } 
} 
class Opel extends Factory { 
    public $price = 14; 
    function Opel() {} 
    function opelVsford(){ 
     return "C:" . ($this->price - $this->ford->price); 
    } 
} 

/* 
Here a implementation 
*/ 
$factory = new Factory(); 
echo $factory->audi->audiVsOpel(); // want to echo -4 
echo $factory->ford->fordVsAudi(); // want to echo 2 
echo $factory->opel->opelVsford(); // want to echo 2 

Répondre

1

Vous pouvez utiliser un getter dans votre classe usine:

public function getFactory($factory) { 
    if (NULL === $this->{$factory}) { 
     $this->{$factory} = new $factory; 
    } 
    return $this->{$factory}; 
} 

Et puis obtenir vos différents objets d'usine dans chaque usine Classes ainsi:

$this->getFactory('opel')->price 

travail exemple de votre code:

class Car { 
    function Car() {} 
} 
class Model extends Car { 
    public $audi; 
    public $ford; 
    public $opel; 

    function Model() { 
     parent::Car(); 

     $this->audi = new Audi(); 
     $this->ford = new Ford(); 
     $this->opel = new Opel(); 
    } 

} 
class Factory { 
    public $audi = NULL; 
    public $ford = NULL; 
    public $opel = NULL; 
    function Factory(){ 
     $model = new Model(); 

     $this->audi = $model->audi; 
     $this->ford = $model->ford; 
     $this->opel = $model->opel; 
    } 

    public function getFactory($factory) { 
     if (NULL === $this->{$factory}) { 
      $this->{$factory} = new $factory; 
     } 
     return $this->{$factory}; 
    } 
} 
class Audi extends Factory { 
    public $price = 10; 
    function Audi() {} 
    function audiVsOpel(){ 
     return "A:" . ($this->price - $this->getFactory('opel')->price); 
    } 
} 
class Ford extends Factory { 
    public $price = 12; 
    function Ford() {} 
    function fordVsAudi(){ 
     return "B:" . ($this->price - $this->getFactory('audi')->price); 
    } 
} 
class Opel extends Factory { 
    public $price = 14; 
    function Opel() {} 
    function opelVsford(){ 
     return "C:" . ($this->price - $this->getFactory('ford')->price); 
    } 
} 

/* 
Here a implementation 
*/ 
$factory = new Factory(); 
var_dump($factory); 
echo $factory->audi->audiVsOpel(); // echo -4 
echo $factory->ford->fordVsAudi(); // echo 2 
echo $factory->opel->opelVsford(); // echo 2 
+0

Nice, je savais qu'il y avait s un problème d'usine. : D Merci, au travail. –