Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理PHP中的大IF语句_Php_If Statement - Fatal编程技术网

处理PHP中的大IF语句

处理PHP中的大IF语句,php,if-statement,Php,If Statement,PHP中的普通if语句有什么好的替代方法吗?我知道switch,但我猜在处理真正大的if语句时,会有一些更精致的替代方法 非常感谢,外面真的没有魔法锤。要使它们易于管理,最好的办法是将嵌套的ifs分解为它们自己的函数,使它们更具可读性 还有,别忘了。这样可以避免编写for循环来过滤项目 此外,还可以通过使用来消除嵌套。基本上,您可以反转if并执行返回操作(将条件分解为函数的另一个原因)。实际上没有魔法锤。要使它们易于管理,最好的办法是将嵌套的ifs分解为它们自己的函数,使它们更具可读性 还有,别

PHP中的普通
if
语句有什么好的替代方法吗?我知道
switch
,但我猜在处理真正大的
if
语句时,会有一些更精致的替代方法


非常感谢,

外面真的没有魔法锤。要使它们易于管理,最好的办法是将嵌套的ifs分解为它们自己的函数,使它们更具可读性

还有,别忘了。这样可以避免编写for循环来过滤项目


此外,还可以通过使用来消除嵌套。基本上,您可以反转if并执行
返回操作(将条件分解为函数的另一个原因)。

实际上没有魔法锤。要使它们易于管理,最好的办法是将嵌套的ifs分解为它们自己的函数,使它们更具可读性

还有,别忘了。这样可以避免编写for循环来过滤项目


此外,还可以通过使用来消除嵌套。基本上,您可以反转if并执行一个
返回
(将条件分解为函数的另一个原因)。

那么
如果
如果
,那么就没有太多其他原因了。当然,
开关
是一种选择,但根据具体情况,它可能不适用

如果您正在进行面向对象编程,则可能就是您所需要的


否则,您必须提供更多信息…

好吧
如果
如果
,那么就没有太多其他信息了。当然,
开关
是一种选择,但根据具体情况,它可能不适用

如果您正在进行面向对象编程,则可能就是您所需要的


否则,您必须提供更多信息…

如果您不能在一个屏幕上阅读您的算法,则有99.9%的可能性需要重构代码以提高可读性

改变

if ($isHappening) {
  // ... millions of lines of code
} else {
  // .. another million lines of code
} 
进入


如果你不能在一个屏幕上阅读你的算法,你有99.9%的机会需要重构你的代码以提高可读性

改变

if ($isHappening) {
  // ... millions of lines of code
} else {
  // .. another million lines of code
} 
进入


欢迎来到面向对象的世界:)

然后,使用数组进行调度:

$choices = array( "case1" => new Case1(), "case2" => new Case2(), ... );

$choices[ $_GET["case"] ]->do();

欢迎来到面向对象的世界:)

然后,使用数组进行调度:

$choices = array( "case1" => new Case1(), "case2" => new Case2(), ... );

$choices[ $_GET["case"] ]->do();

如果只想提高可读性,则始终可以拆分If语句中的表达式:

$exp1 = is_array($var) && isset($var['key']);
$exp2 = is_object($var) && isset($var->key);
$exp3 = substr($string, 0, 4) == 'foo';
$exp4 = ($exp1 || $exp2) && $exp3;
if ($exp4) {}
而不是

if (((is_array($var) && isset($var['key'])) || (is_object($var) && isset($var->key))) && substr($string, 0, 4) == 'foo') {}

显然,这些都是简化的示例,但您得到了这样的想法…

如果您只想提高可读性,那么您始终可以在If语句中拆分表达式:

$exp1 = is_array($var) && isset($var['key']);
$exp2 = is_object($var) && isset($var->key);
$exp3 = substr($string, 0, 4) == 'foo';
$exp4 = ($exp1 || $exp2) && $exp3;
if ($exp4) {}
而不是

if (((is_array($var) && isset($var['key'])) || (is_object($var) && isset($var->key))) && substr($string, 0, 4) == 'foo') {}

显然,这些都是简化的示例,但你明白了…

如果“大”是指大的、高度嵌套的“ifs”,这是代码气味的明显标志,你应该看看OOP和设计模式。

如果“大”是指大的、高度嵌套的“ifs”,这是代码气味的明显标志,你应该看看OOP和设计模式。

你的
if
语句有多大?它们可能会被简化,根据您处理的逻辑类型,可能会有其他选择。尽管如此,如果你发布一些代码,这将是有见地的。不完全确定你的意思。类似ruby的
,除非
?你说的大是什么意思?大条件,大实体,还是深度嵌套?条件是大的还是当条件是真的大时要执行的代码是大的?不,条件是大的,有很多带有if_函数的行,我想改进一下…你的
if
语句有多大?它们可能会被简化,根据您处理的逻辑类型,可能会有其他选择。尽管如此,如果你发布一些代码,这将是有见地的。不完全确定你的意思。类似ruby的
,除非
?你说的大是什么意思?大条件,大实体,还是深度嵌套?条件是大的还是当条件真的大时要执行的代码?不,条件是大的,有很多带有if_函数的行,我想让它们更好…@xtofl提倡的是多态性的巧妙使用。显然,这是一个过于简化的情况,但使用多态性来重新重构复杂的if语句是坚实的OO设计的一部分。我可以保证这一点。使用OOP一段时间后,长而复杂的if语句的概念对我来说是陌生的。现在一切都变得更短更简单了,@xtofl提倡的是多态性的巧妙使用。显然,这是一个过于简化的情况,但使用多态性来重新重构复杂的if语句是坚实的OO设计的一部分。我可以保证这一点。使用OOP一段时间后,长而复杂的if语句的概念对我来说是陌生的。现在一切都变得更短更简单了。我见过很多跨越多行的表达式。这是提高可读性的好方法!我见过很多跨多行的表达式。这是提高可读性的好方法!