Потихоньку изучаю паттерны с языком, возможно я где-то допустил для себя не очевидную ошибку. Почему $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();