私の意見では、GET 変数を介してスクリプトをインクルードする場合はコードのにおいがしますが、true の場合にロジックが値オブジェクト自体を返すメソッドを持つ値クラスを使用して、これをエレガントに行うことができます。
switch
$switch == $case (緩い一致) の場合、ステートメントはすべてのコードを実行することに注意してください。したがって、 を返すか$this
、何も返さないメソッドを作成するだけです。
例:
class Haystack {
public $value;
public function __construct($value)
{
$this->value = $value;
}
public function contains($needle):
{
if (strpos($this->value, $needle) !== false)
return $this;
}
}
$kw = new Haystack($_GET['kw']);
switch ($kw) {
case $kw->contains('berlingo'):
require_once 'berlingo.php';
case $kw->contains('c4'):
require_once 'c4.php';
}
もちろん、このコードにタイプヒントを惜しみなく飾ることもできます。使用していて、null 許容の戻り値の型 (つまり のメソッド シグネチャ) をサポートするバージョンの PHP を使用していない場合は、それpublic function contains(string $substring): ?Haystack
を反映するようにクラスを作成する必要があります。
例:
final class Haystack {
private $value;
private $isMain;
public function __construct(string $value, bool $isMain = true)
{
$this->value = $value;
$this->isMain = $isMain;
}
final public function contains($needle): Haystack
{
if (strpos($this->value, $needle) !== false)
return $this;
return new Haystack($needle, false);
}
}
このように、明示的な一致ロジックがメソッド内で失敗した場合、何らかの理由new Haystack($_GET['kw']) == new Haystack($needle);
で true の場合、一致しないプロパティ「$isMain」により、それらが等しいと評価されないことが保証されます。
繰り返しますが、この特定の状況でそもそもなぜこれを行う必要があるのかを再検討します。伝統的に、Composerは依存関係管理ツールであり、PSR 自動ロード標準を介して必要なさまざまなスクリプトを含めるために使用されます。Router ライブラリと組み合わせると、実際のニーズに対応するのにおそらく最も役立つでしょう。