На мой взгляд, это запах кода , если вы включаете скрипты через переменные GET, но вы можете сделать это элегантно, используя класс значений с методами, логика которых возвращает сам объект значения, если он истинен.
Идея состоит в том, чтобы помнить, что оператор 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';
}
Конечно, вы можете щедро украсить этот код печатными буквами. Если вы это делаете и не используете версию PHP, которая поддерживает типы возвращаемых значений, допускающие значение NULL (т. Е. Сигнатура метода 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. Это в сочетании с библиотекой маршрутизатора, вероятно, будет наиболее полезным для удовлетворения ваших реальных потребностей.