ajaminov/trip-sorter

该软件包的最新版本(dev-master)没有提供许可信息。

排序卡片示例包。

dev-master 2018-08-23 20:22 UTC

This package is not auto-updated.

Last update: 2024-09-29 06:25:38 UTC


README

此软件包用于排序包含运输类型、出发点和目的地信息的登机牌。我建议出发点和目的地点不能重复。此外,行程不能循环(出发点和目的地相同)。

入门

可以通过在 composer 中安装“ajaminov/trip-sorter”,或者直接下载仓库。

安装

下载使用

git clone https://github.com/Superwow3d/trip-sorter.git

在项目根目录下运行 'composer install' 命令

composer install

之后,您可以测试它

composer test

替代方法

在终端中运行

composer require ajaminov/trip-sorter dev-master

需要 php: >=7.0

如何执行

如前所述,您可以通过 composer 安装该软件包。但如果您下载了仓库,则只需通过 composer 运行 trip-sorter.php 文件

composer execute

TripSorter\MovableBuilder

分别通过 setFromsetTo 方法设置出发点和目的地点

使用 byTrain / byAirplane / byBus 方法选择运输方式

设置座位、运输编号和其他信息。

build 方法将返回 Movable 类(登机牌)的实例。

创建任意数量的登机牌,并通过 \TripSorter\Sorter\Sorter 类的 sortCards 方法对其进行排序,该方法返回字符串数组。

例如

$cards = [];
try {
    $cards[] = (new MovableBuilder())->setFrom('Madrid')
        ->setTo('Barcelona')
        ->byAirplane()
        ->setSeat('44F')
        ->setFlightNumber('MAU113')
        ->setGate('F')
        ->build();
    $cards[] = (new MovableBuilder())->setFrom('Barcelona')
        ->setTo('Warsaw')
        ->byTrain()
        ->setSeat('23A')
        ->setTrainNumber('44')
        ->build();
    $cards[] = (new MovableBuilder())->setFrom('Astana')
        ->setTo('Madrid')
        ->byAirplane()
        ->setSeat('12')
        ->setFlightNumber('44')
        ->addBaggage('123')
        ->setGate('T2')
        ->build();
    $cards[] = (new MovableBuilder())->setFrom('Pavlodar')
        ->setTo('Astana')
        ->byBus()
        ->setSeat('1C')
        ->build();
} catch (MovableBuilder\IncorrectDataException $e) {}

$sorter = new \TripSorter\Sorter\Sorter();
$cards = $sorter->sortCards($cards);

/** @var \TripSorter\Movable $card */
foreach ($cards as $card) {
    echo $card . PHP_EOL;
}

此代码将输出以下内容

1. Take the airport bus from Pavlodar to Astana. Sit in seat 1C
2. From Astana, take flight 44 to Madrid. Gate T2, seat 12. Baggage drop at ticket counter 123. 
3. From Madrid, take flight MAU113 to Barcelona. Gate F, seat 44F.
4. Take train from Barcelona to Warsaw. Sit in seat 23A
5. You have arrived at your final destination

如何扩展

API 使用带有 build 方法的 Buildable 接口,该方法返回 Movable 类。

例如,您可以创建马匹运输。

class Horse extends \TripSorter\Movable
{
    public function __construct(string $from, string $to)
    {
        $this->from = $from;
        $this->to = $to;
    }

    public function display(): string
    {
        return 'Ride horse from ' . $this->from . ' to ' . $this->to . '.';
    }
}

class HorseBuilder implements MovableBuilder\Buildable
{
    private $from;
    private $to;

    public function setFrom(string $from): self
    {
        $obj = clone $this;
        $obj->from = $from;
        return $obj;
    }

    /**
     * @param string $to
     * @return MovableBuilder
     */
    public function setTo(string $to): self
    {
        $obj = clone $this;
        $obj->to = $to;
        return $obj;
    }

    public function build(): \TripSorter\Movable
    {
        return new Horse($this->from, $this->to);
    }
}

然后使用它

$card = (new HorseBuilder()
    ->setFrom('Morrowind')
    ->setTo('Oblivion')
    ->build();