如果您有三种状态,则可以使用if ifif和else来显示包含三个选项的动态页面。如下所示
if($user == 1){
// put code here for first state
}elseif($user == 2){
// put code here for 2nd state
}else{
// Put code here for default state
}
但我有5个这样的州。如何使用它们使我的页面动态,即 $ user == 1 , $ user == 2 , $ user == 3 , $ user == 4 和默认(我希望默认显示除 $ user == * 以外的所有人)
答案 0 :(得分:5)
你听说过switch statement吗? :)
switch($user) {
case 1:
// Do something
break;
case 2:
// Do something
break;
case 3:
// Do something
break;
case 4:
// Do something
break;
case 5:
// Do something
break;
default:
// Do something
break;
}
请注意,在这种情况下,case
关键字后的数字可能看起来像语法,约定或其他。他们不是。这些实际上是您与$user
进行比较的值。因此,如果case 'this is a string':
的值为字符串$user
,也可能会执行'this is a string'
。
答案 1 :(得分:4)
请勿使用switch语句。
显然你有一个更复杂的结构。它不是二进制“true / false”,它不是三元组“true / false / null或unset”。
使用地图,查找数组和/或多态。请防止使用越来越多的无法在某些时候维护的交换机案例。
$usermap = array(
1 => array('data for user 1'),
2 => array('data for user 2'),
);
if (isset($usermap[$userid])) {
// do something with $usermap[$userid]
} else {
// default case
}
好处:所有用户特定数据都在数组中。您只有两个代码案例:已知用户的特殊情况和其他所有人的默认情况。特殊情况和一般情况的代码只能写一次。
缺点:特殊情况代码对所有特殊用户都是一样的,只有数据不同。
通常,很多时候您可以通过应用这样的映射数组来阻止使用switch
。请记住,这样的数组可以来自数据库,因此可以动态更改,而switch语句中的代码是完全静态的 - 更改它需要编码器。
如果您需要一些不同的代码,您也可以将它存储在变量中(从PHP 5.3开始工作):
$usermap = array(
1 => array('code' => function() { return 1+1; } ),
2 => array('code' => function() { return 2*3; } ),
);
if (isset($usermap[$userid])) {
$stuff = $usermap[$userid]['code'](); // execute the function
} else {
$stuff = 0; // default
}
通过这种方式,您可以通过某些方式更改代码。但是要小心,如果你在数组中的lambda函数中放入太多逻辑,这可能会变得比一个简单的switch语句更复杂。
更好的解决方案是使用
这是一种基本的OOP东西:你有一个写入对象的用户的一般行为,特殊情况扩展了这个一般情况并改变了一些东西。
class User {
public function getFoo() {
return 0;
}
}
class SpecialUser1 extends User {
public function getFoo() {
return 1+1;
}
}
class SpecialUser2 extends User {
public function getFoo() {
return 2*3;
}
}
$usermap = array(
1 => array('SpecialUser1'),
2 => array('SpecialUser2'),
);
if (isset($usermap[$userid])) {
$user = new $usermap[$userid]();
} else {
$user = new User;
}
$user->getFoo(); // Different result depending on the user id
因此,有很多方法可以阻止使用switch
。为什么?因为switch
在集中的地方为代码增加了很多复杂性。这被认为是一件坏事。复杂性是无法避免的,它是创建软件的必要副产品。但真正的挑战是防止复杂性积累和集中。在某些层次上传播复杂性几乎总是更好。
因此,知道要避免哪些事情(如switch
),以及如何以较低的复杂性实现相同目标,对于一个优秀的编码人员来说是必不可少的。
答案 2 :(得分:3)
使用switch
,http://php.net/manual/en/control-structures.switch.php
switch($user)
{
case "1": /*your code */ break;
case "2": .... break;
case "3": .... break;
default: ....
}
答案 3 :(得分:2)
switch ($user) {
case 1:
// put code here for 1st state
break;
case 2:
// put code here for 2nd state
break;
case 3:
// put code here for 3rd state
break;
default:
// put code here for default state
break;
}