Primero, no se que tan necesario serían esos extends.
Segundo, en tu clase Auto no se puede instanciar clases de ese modo te arrojará error, la correcta forma sería:
Código PHP:
Ver originalclass Auto {
public $tanque;
public $motor;
function Auto(){
$this->tanque = new TanqueGasolina();
$this->motor = new Motor();
}
}
Tercero, de la forma en que estás trabajando te encajonas tu mismo, y claro no queda otra que pasar por parámetro y ver....
Código PSEUDO:
Ver originalencender(gas){
if(gas > 0){
encender
}
}
Entonces:
Código PHP:
Ver original$auto = new Auto();
$auto->motor->encender($auto->tanque->gasolina);
dejame darle una vuelta....
Por mientras te dejo mi código:
Código PHP:
Ver original<?php
class Auto {
public $tanque;
public $motor;
function Auto(){
$this->tanque = new TanqueGasolina();
$this->motor = new Motor();
}
}
class TanqueGasolina{
public $gasolina = 100;
}
class Motor{
public $encendido = "Apagado";
public function encender($gas){
if($gas > 0){
$this->encendido = "Encendido";
return "Encendido!!";
}
}
}
$auto = new Auto();
echo $auto->motor->encender($auto->tanque->gasolina);
?>
Falta encapsulamiento de todas maneras!!! jajaja
Edito, porque lo otro sería usar la funcion encender derechamente en auto:
Código PHP:
Ver originalclass Auto {
public $tanque;
public $motor;
function Auto(){
$this->tanque = new TanqueGasolina();
$this->motor = new Motor();
}
public function encender(){
if($this->tanque->gasolina > 0){
$this->motor->encendido = "Prendido";
}
}
}
Pero no es la idea cierto?