### 問題:
手続きを定義しなさい。引数には `method`と`path`を受け取る。
`method` は `GET`, `POST`, `HEAD`, `PUT`などの文字列である。
path は `/` から始まる任意の文字列である。 (`"/"` だけの場合もありうる)
返り値は `[status, contents]` からなるリスト/配列とする。
`status`は`"200 OK"`, `"404 NotFound"`などの文字列である。
`contents`は、method, path の関係ごとに紐付けられた文字列である
以下の要件を満たすように実装せよ。
```
GET "/hello" → ("200 OK", "こんにちは")
GET "/bye" → ("200 OK", "さよなら")
POST "/bye" → ("200 OK", "ばいばい")
該当なし → ("404 NotFound", "ないです")
```
処理とデータは可能な限り分離せよ。
`if (path == "/hello") 〜 elseif (path == "/bye")`のように、条件文にマジックナンバーが含まれるコードは望ましくない。
## 回答
```php
<?php
class Router
{
private array $routes;
public fucntion __construct($routes)
{
$this->routes = $routes;
}
/**
* @return array{0:string, 1: string}
*/
public function funcA(string $method, string $path): array
{
return $this->routes[$path][$method] ?? ['404 NotFound', 'ないですう'];
}
}
$ja = new Route([
"/hello" => [
"GET" => ["200 OK", "こんにちは"]
],
"/bye" => [
"GET" => ["200 OK", "さよなら"],
"POST" => ["200 OK", "ばいばい"],
],
]);
$en = new Route([
"/hello" => [
"GET" => ["200 OK", "Hello"]
],
"/bye" => [
"GET" => ["200 OK", "Good bye"],
"POST" => ["200 OK", "bye bye"],
],
]);
assert($en->funcA('GET', '/hello') === ["200 OK", "Hello"]);
assert($ja->funcA('GET', '/hello') === ["200 OK", "こんにちは"]);
assert($ja->funcA('GET', '/fuga') === ["404 NotFound", "ないです"]);
```