0

我在http://www.php.net/manual/en/function.str-split.php#78040遇到了这个脚本

   /**
     Returns a formatted string based on camel case.
     e.g. "CamelCase" -> "Camel Case".
    */
    function FormatCamelCase( $string ) {
            $output = "";
            foreach( str_split( $string ) as $char ) {
                    strtoupper( $char ) == $char and $output and $output .= " ";
                    $output .= $char;
            }
            return $output;
    }

古玩部分是:

strtoupper( $char ) == $char and $output and $output .= " ";

我的问题

  • 详细分解strtoupper( $char ) == $char and $output and $output .= " ";及其有效的原因
  • 这不适用于break, returnecho但它适用于任何功能,包括print
  • 这是最佳实践吗
  • 这样的代码有什么优点或缺点吗
4

5 回答 5

4

它与

if (strtoupper( $char ) == $char) {
    if ($output) {
         $output .= " ";
    }  
}

对于代码A and B,如果评估为真,B将执行。A

和is之间的区别比它们之间的&&, andis&&具有更高的优先级。and.=

于 2012-10-06T10:38:58.953 回答
4

http://en.wikipedia.org/wiki/Short-circuit_evaluation

正如其他答案所表明的那样,只有在前面的语句==true 时,才会执行每个后续语句。

这在代码中更相关,例如: if(foo and bar) { //do something }

如果 foo==false 则无需浪费时间评估 bar。

我不能说我在布尔逻辑之外使用短路评估来发挥我的优势,并且为了其他编码人员查看我的代码,我可能不会现在开始。

于 2012-10-06T10:49:49.577 回答
1
  strtoupper( $char ) == $char and $output and $output .= " ";

是一种简写,如果首先检查它是否是大写字符,如果是的话,他会转到下一个并检查是否$output不为空,然后在 $output 中添加一个空格

这不是最佳做法,但使用一个衬垫感觉很酷

优点是它很酷缺点是你需要一遍又一遍地阅读它才能理解它

于 2012-10-06T10:41:24.903 回答
0

strtoupper( $char ) == $char 和 $output 和 $output .= " ";

方法

if(strtoupper( $char ) == $char && $output && $output.=" "){
// if string is equal than it checks for $output
//is that present?
// if  present than it checks for $output value
//and add a space to that if everything works fine than go to true part
}
于 2012-10-06T10:40:58.670 回答
0

您在这里有一个表达式,它由三个与逻辑and运算符连接的子表达式组成:

       strtoupper( $char ) == $char and $output and $output .= " ";
                             A      and    B    and       C

由于运算符优先级,顺序是从左到右的直接顺序。

因为那是你可以通过的。我想你明白 A 和 B 和 C 自己做了什么。然而,如果这三个中的任何一个将评估false退出执行整个表达式,PHP 将会。该表达式一直运行到false正在执行(否则 PHP 无法说出结果,请参阅Short-circuit evaluation)。

它显示:字符为大写并输出,并在输出中添加空格。

如果字符不是大写,那句话就是错误的。所以它不会持续超过:

上面写着:字符不是大写的。

让我们拿这句话来说,这个字符是大写的。但没有输出:

上面写着:字符是大写的,没有输出。

最后让我们说有输出:

它显示:字符为大写并输出,并在输出中添加空格。

将编程语言视为一种用来表达某些东西的语言。

这只是一种常见的表达方式。有些程序员不习惯用它来编写富有表现力的表达式,在他们的心智模型中,它更像是基本的 if then else 写作风格:

if (A) then if (b) then C.

上面写着:如果字符是大写的,那么如果输出,则在输出中添加一个空格。

做最适合你的事。只需阅读代码。它有助于:

strtoupper( $char ) == $char and $output and $output .= " ";

字符为大写并输出并添加空格输出。

于 2012-10-06T16:26:28.790 回答