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
}
}