比php中的if条件更好的方法?如果条件太多,那么我需要更简单有效的方法...并且您可以向我展示示例?!
if($_GET['id']=="4") {
try {
$ids = '4,246,226';
$notin = '1';
$parent_forum = 'php_forums.parent_id';
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
if($_GET['id']=="246") {
try {
$ids = '246';
$notin = '1';
$parent_forum = 'php_forums.parent_id';
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
if($_GET['id']=="226") {
try {
$ids = '226';
$notin = '1';
$parent_forum = 'php_forums.parent_id';
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
答案 0 :(得分:1)
关于代码的事情是,您可以通过许多不同的方式解决一个问题。根据环境以及您要如何组织问题和项目的规模,这都是合理的。
因此,例如,如评论中所述,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');
}
}
我将切换用例归为一组的唯一原因是,您的代码中似乎没有什么变化可以证明明确的分离,但是请注意,您可以根据您的ID来区分两种情况,或者将某些IDS分组如果只有少数几个具有相同的性能,则可以将特定的IDS分离为非常特定的行为。
方法调用
这种情况只是解决同一问题的另一种方式。只是因为它的傻笑和玩味:)我敢肯定它有自己的游戏案例,就像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
的可能性。永远不要信任系统外部的变量