Суть кода в том, что вы можете решать одну проблему разными способами.Все это оправдано в зависимости от среды и от того, как вы хотите организовать свою проблему и размер вашего проекта.
Так, например, как уже упоминалось в комментариях, хорошей заменой для if conditions
являются switch cases
.
Пример переключения случаев
Я не знаю всей структуры вашего вопроса, но я предоставлю решение о том, как я это сделаю.
/**
* @throws Exception
*/
public function doSomethingWithGET()
{
$notin = 1;
$parent_forum = 'php_forums.parent_id';
switch ($_GET['id']) {
case '4':
case '246':
case '226':
$ids = $_GET['id'];
break;
default:
throw new Exception('Specify your error message here');
}
}
Единственная причина, по которой я сгруппировал случаи переключения, заключается в том, что, казалось, ничего не изменилось вваш код, который оправдывает четкое разделение, НО, чтобы вы знали, что вы можете разделить случаи, чтобы они были очень конкретными, в зависимости от ваших идентификаторов, ИЛИ сгруппировать определенные идентификаторы, если только несколько ведут себя одинаково, в то же время разделяя конкретные идентификаторы для очень специфических вариантов поведения.
Вызовы методов
Этот сценарий является просто другим способом решения той же проблемы.Только для хихиканья и игривости :) Я уверен, что у него есть свои собственные игровые случаи, точно так же, как get_class
может избежать того, чтобы мы постоянно создавали switch case
для фабричных классов, но, как упоминалось ранее, все зависит от вашей идеи:)
class Test
{
/**
* @var array $idsAndActions
**/
protect $idsAndActions;
public function __construct ()
{
$this->idsAndActions = [
'4' => 'doSomethingWithGET',
'246' => 'doSomethingWithGET',
'226' => 'somethingDifferent',
];
}
public function parseGet ()
{
if (array_key_exists($_GET['id'], $this->idsAndActions)) {
$methodCall = $this->idsAndActions[$_GET['id']];
if (method_exists($this, $methodCall)) {
$this->$methodCall();
//add here more code for success events
}
}
echo '[Error] Your message';
//You can also throw an exception, which I would advice depending on who calls this :)
}
public function doSomethingWithGET ()
{
$this->notin = 1;
$this->parent_forum = 'php_forums.parent_id';
$this->ids = $_GET['id'];
}
public function somethingDifferent ()
{
$this->notin = 20;
$this->parent_forum = 'another_thing_here';
$this->ids = $_GET['id'];
}
}
Надеюсь, что это поможет вам дать некоторые идеи о том, как вы можете решить эту проблему или найти решение, которое лучше всего подходит вам!:)
ПРИМЕЧАНИЕ: Я знаю, что это не упоминается, НО, если вы используете $_GET['id']
, сделайте какой-нибудь доступ к DBs
или выполните system commands
, не забудьтевозможность system breach
и sql injection
.Никогда не доверяйте переменным, внешним по отношению к системе