PHP在检查存在性时抑制错误+;布尔值?

PHP在检查存在性时抑制错误+;布尔值?,php,coding-style,refactoring,Php,Coding Style,Refactoring,我有一个使用选项数组的PHP脚本:$opts[] $opts可以包含0个或多个键值对。所有值都是布尔值 在检查是否存在键,然后检查值是否为真时,我一直在执行以下操作: if(isset($opts['small']) && $opts['small']) $classes .= 'smallBtn'; 这是可行的,但我觉得有点冗长 经过思考,我提出了以下备选方案: if(@$opts['small']) $classes .= "smallBtn"; 这要小得多,但依赖于@e

我有一个使用选项数组的PHP脚本:$opts[]

$opts可以包含0个或多个键值对。所有值都是布尔值

在检查是否存在键,然后检查值是否为真时,我一直在执行以下操作:

if(isset($opts['small']) && $opts['small']) $classes .= 'smallBtn';
这是可行的,但我觉得有点冗长

经过思考,我提出了以下备选方案:

if(@$opts['small']) $classes .= "smallBtn";
这要小得多,但依赖于@error抑制

我的问题是,哪种方法更好

第一个是长篇大论,但在它所做的事情上是明确的

第二个较短,但可能被视为糟糕的编码实践

更新:

第三种选择,也是我认为最好的选择,是使用:

从手册中:

如果变量不存在,则不会生成警告。这意味着empty()本质上是与!isset($var)| |$var==false


就个人而言,我更喜欢第一种方法,即干净的代码指导原则和代码可读性


我不会抑制任何可能的错误。

就个人而言,我更喜欢第一种方法,即干净的代码指南和代码可读性


我不会抑制任何可能的错误。

就个人而言,我更喜欢第一种方法,即干净的代码指南和代码可读性


我不会抑制任何可能的错误。

就个人而言,我更喜欢第一种方法,即干净的代码指南和代码可读性


如果可能的话,我不会抑制任何错误。

使用@抑制错误通常是一件坏事,因为这会使调试变得非常困难。例如,假设您在变量名中输入了一个拼写错误(请注意双美元符号):

这将一直是错误的,不会抛出任何错误

如果您想缩短代码,可以使用函数,例如:

function optionIsTrue($opts, $key) {
    return isset($opts[$key]) && $opts[$key] === true;
}

if (optionIsTrue($opts, "small")) {
    $classes .= 'smallBtn';
}

使用@来抑制错误通常是一件坏事,因为这会使调试变得非常困难。例如,假设您在变量名中输入了一个拼写错误(请注意双美元符号):

这将一直是错误的,不会抛出任何错误

如果您想缩短代码,可以使用函数,例如:

function optionIsTrue($opts, $key) {
    return isset($opts[$key]) && $opts[$key] === true;
}

if (optionIsTrue($opts, "small")) {
    $classes .= 'smallBtn';
}

使用@来抑制错误通常是一件坏事,因为这会使调试变得非常困难。例如,假设您在变量名中输入了一个拼写错误(请注意双美元符号):

这将一直是错误的,不会抛出任何错误

如果您想缩短代码,可以使用函数,例如:

function optionIsTrue($opts, $key) {
    return isset($opts[$key]) && $opts[$key] === true;
}

if (optionIsTrue($opts, "small")) {
    $classes .= 'smallBtn';
}

使用@来抑制错误通常是一件坏事,因为这会使调试变得非常困难。例如,假设您在变量名中输入了一个拼写错误(请注意双美元符号):

这将一直是错误的,不会抛出任何错误

如果您想缩短代码,可以使用函数,例如:

function optionIsTrue($opts, $key) {
    return isset($opts[$key]) && $opts[$key] === true;
}

if (optionIsTrue($opts, "small")) {
    $classes .= 'smallBtn';
}

我做了一个评论,但你看不出区别,这里是这样的: 好吧,根据你应该简单地说,第一个是更好的方法,但是为了最好的实践,为了在看了之后最好地理解,请尝试阅读这一个:

if(isset($opts['small']) 
   && $opts['small'] 
) {
     $classes .= 'smallBtn'; 
}

据我所知,你永远不应该隐瞒错误

我做了一个评论,但你看不到其中的区别,下面是: 好吧,根据你应该简单地说,第一个是更好的方法,但是为了最好的实践,为了在看了之后最好地理解,请尝试阅读这一个:

if(isset($opts['small']) 
   && $opts['small'] 
) {
     $classes .= 'smallBtn'; 
}

据我所知,你永远不应该隐瞒错误

我做了一个评论,但你看不到其中的区别,下面是: 好吧,根据你应该简单地说,第一个是更好的方法,但是为了最好的实践,为了在看了之后最好地理解,请尝试阅读这一个:

if(isset($opts['small']) 
   && $opts['small'] 
) {
     $classes .= 'smallBtn'; 
}

据我所知,你永远不应该隐瞒错误

我做了一个评论,但你看不到其中的区别,下面是: 好吧,根据你应该简单地说,第一个是更好的方法,但是为了最好的实践,为了在看了之后最好地理解,请尝试阅读这一个:

if(isset($opts['small']) 
   && $opts['small'] 
) {
     $classes .= 'smallBtn'; 
}

据我所知,您永远不应该抑制错误,正确的方法是进行冗长的检查,这样错误就不会发生。抑制错误会修复症状,但不会修复错误。以下摘录自您的问题,是正确答案:

if(isset($opts['small']) && $opts['small']) $classes .= 'smallBtn';

您希望使代码更短、更易于阅读,这是正确的。但是我已经看到很多PHP代码是由其他专家完成的,我在生产代码中看到的唯一的“@”错误抑制是我自己作为一个快速修复程序放在那里的。在受到同事的批评后,我立即进行了冗长的检查,这样错误就不会发生。

正确的方法是进行冗长的检查,这样错误就不会发生。抑制错误会修复症状,但不会修复错误。以下摘录自您的问题,是正确答案:

if(isset($opts['small']) && $opts['small']) $classes .= 'smallBtn';

您希望使代码更短、更易于阅读,这是正确的。但是我已经看到很多PHP代码是由其他专家完成的,我在生产代码中看到的唯一的“@”错误抑制是我自己作为一个快速修复程序放在那里的。在受到同事的批评后,我立即进行了冗长的检查,这样错误就不会发生。

正确的方法是进行冗长的检查,这样错误就不会发生。抑制错误会修复症状,但不会修复错误。以下摘录自您的问题,是正确答案:

if(isset($opts['small']) && $opts['small']) $classes .= 'smallBtn';
您希望使代码更短、更易于阅读,这是正确的。但是我已经看到很多PHP代码是由其他专家完成的,我在生产代码中看到的唯一的“@”错误抑制是我自己作为一个快速修复程序放在那里的。在受到同事的批评后,我立即进行了冗长的检查,这样错误就不会发生。

正确的方法是