villiwalla
@villiwalla
HTML-верстка

Как в Фабике методов передать значение свойству объекта?

Потихоньку изучаю паттерны с языком, возможно я где-то допустил для себя не очевидную ошибку. Почему $load всегда null?
abstract class Logistic {
    public $load;
    public $status;
    abstract function delivery();
}

abstract class Transport {
    abstract function uploaded();
    abstract function price();
}

class TruckDelivery extends Logistic {

    public function delivery()
    {
        if($this->load === 100) {
            $this->status =  "Отправка груза наземным транспортом \n";
        } elseif ($this->load < 100 && $this->load >= 90) {
            $this->status =  "Отправка груза наземным транспортом с добором груза по маршруту\n";
        } else  {
            $this->status = "Отправка груза невозможна. Наземный транспорт не загружен \n";
        }

        return $this->status;
    }

}

class AirplaneDelivery extends Logistic {

    public function delivery()
    {
        if($this->load === 100) {
            $this->status =  "Отправка груза воздушым грузовым судном \n";
        } else {
            $this->status = "Отправка груза невозможна. Воздушное судно не зангруженно \n";
        }

        return $this->status;
    }

}

class Airplane extends Transport {
    public function uploaded()
    {
        return new AirplaneDelivery();
    }

    public function price()
    {
        return "Стоимость 200 руб.\n";
    }
}

class Truck extends Transport {
    public function uploaded()
    {
        return new TruckDelivery();
    }

    public function price()
    {
        return "Стоимость 100 руб. + 50 руб. на загрузку попути\n";
    }
}

$shipping = new Truck();
$shipping->uploaded()->load = 100;
echo $shipping->uploaded()->delivery();
echo $shipping->price();
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@maxtm
Make money, not job
У Вас метод uploaded всегда возвращает новый инстанс TruckDelivery, а не ранее созданный
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы