php journey sorter
1.0.0
作者:AbdElKader Bouadjadja [email protected]
此 API 使您能够对无序的登机牌进行排序。
构建 docker 映像并运行它以使其成为容器:
docker build -t medinae/journey .
docker run medinae/journey
1.从有效输入数据加载登机牌对象:
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2.将您的登机牌传递给新的 Trip 对象。您还可以注入实现 BoardingCardLoaderInterface 的特定排序器。默认情况下,将使用现有的排序器。
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3.获取您订购的登机牌(注意:如果您想将行程信息显示为人类可读的形式,也可以实现 toString 方法):
$ trip -> getOrderedBoardingCards ();
4.享受 !
您可以通过实现 BoardingCardInterface 创建一些新的登机牌对象。请注意,如果您希望您的登机牌对象可由 API 排序器进行排序,请不要忘记实现 ComparableBoardingCardInterface。另外,将其添加到加载器工厂中。
例子 :
class FerryBoardingCard implements BoardingCardInterface
{
use BoardingCardTrait;
private $ isGoldClass ;
public function __toString ()
{
return sprintf (
' Take ferry from %s to %s. Seat : %s. Gold class : %s ' ,
$ this -> departurePlace ,
$ this -> arrivalPlace ,
$ this -> seat ,
( $ this -> isGoldClass ) ? ' YES ' : ' NO '
);
}
}
然后,必须更换装载机才能用它创建渡轮登机卡:
class JsonBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( $ json )
{
// ...
}
protected function createCard ( array $ cardData )
{
// ...
case ' ferry ' :
// data validation
return new FerryBoardingCard (
new Place ( $ cardData [ ' from ' ]),
new Place ( $ cardData [ ' to ' ]),
$ cardData [ ' seat ' ],
$ cardData [ ' isGoldClass ' ]
);
default:
throw new UnknownBoardingCardTypeException ( ' JSON Loading : Unknown board card type ' . $ type );
}
}
}
关于加载程序,我已经实现了一个 JsonBoardingCardLoader,它从有效的 JSON 输入创建登机卡对象卡此外,登机卡数据可能来自多种格式(例如 XML),因此我使用 loadCards() 方法创建了一个 BoardingCardLoaderInterface。
然后,API 的可能增强可以是 XMLBoardingCardLoader,如下所示:
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
最后,还可以通过实现 CardSorterInterface 创建新的排序器来扩展代码,如下所示:
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}