【问题标题】:an elegant way to handle returning strpos 0 as TRUE将 strpos 0 返回为 TRUE 的优雅方式
【发布时间】:2012-04-08 18:04:37
【问题描述】:
switch (true){
    case stripos($_SERVER['SERVER_NAME'],"mydomain.com", 0) :

        //do something 
        break;

        /*
        stripos returns 4 ( which in turn evaluates as TRUE )  
        when the current URL is www.mydomain.com
        */


    default:

        /*
        stripos returns 0 ( which in turn evaluates as FALSE )  
        when the current URL is mydomain.com
        */


}   

当 stripos 在大海捞针中找到针时,返回 0 或向上。 当 stripos 没有找到针时,它返回 FALSE。这种方法可能有一些优点。但我不喜欢那样!

我来自 VB 背景。在那里,instr 函数(相当于 strpos)在找不到针头时返回 0,如果找到针头则返回 1 或以上。

所以上面的代码永远不会导致问题。

您如何在 PHP 中优雅地处理这种情况?这里的最佳实践方法是什么?

另外,换个说法,你觉得使用

switch(true) 

这是编写代码的好方法吗?

【问题讨论】:

  • if(stripos(....) === false){ ...} else { ... } 有什么问题
  • 没有错。所以您建议将其编码为 case (stripos($_SERVER['SERVER_NAME'],"mydomain.com", 0) === TRUE) 这是最优雅的方式吗?
  • 我会使用 if 语句。使用 switch() 有什么意义?不过,我离 php 专家还差得很远!
  • 您的switch 不起作用。如果您想避开 ===false 布尔驼峰,请使用 strstr() 并让 PHP 字符串评估处理它。
  • 开关出了什么问题?语法错误?

标签: php coding-style strpos boolean-operations


【解决方案1】:

如果大海捞针中不存在针,strpos 将返回 false。默认情况下(使用非严格比较),PHP 会将 0 和 false 视为等价。您需要使用严格的比较。

var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'dog') !== false); // bool (true)
var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'The') !== false); // bool (true)
var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'cat') !== false); // bool (false)

【讨论】:

  • 我会接受这个答案。 (虽然我不认为它是优雅的阅读)。我想我们对此无能为力。这只是 strpos 和 PHP 的连接方式。 if (strpos("abc","a") ) 返回 true 将是从一开始就最优雅的方式。但这永远不会发生。在这种情况下,像马里奥建议的“strstr”更有意义。我勾选了他的评论。
  • 我不同意 strpos ('abc', 'a') 应该返回 true。顾名思义,strpos 函数返回大海捞针在针内的位置。如果大海捞针恰好在开始时有针,那么返回位置 0 是完全有效的(在这种情况下,字符串与 0 索引数组相当)。
  • 好吧,不管你/我喜欢/讨厌它,这不会改变。至于您的评论,如果 strpos 吸盘在“abc”开头找到“a”时返回 1 会更好。数组必须从 0 开始,这都是愚蠢的一部分。1 月 0 日和 12 月 11 日。基于 0 的东西只适用于现实生活中的电梯。一楼被视为0。即使这样也很愚蠢!
  • @AverageJoe 由于与计算机底层架构相关的原因,几乎每种编程语言都对字符串和数组使用 0 索引。 (如果您有一台具有 8 位地址空间的计算机,那么它将有 256 个内存地址。但是如果您从 1 开始作为第一个地址,那么最后一个地址将是 256,这需要 9 位来表示。如果您从0则最后一个地址为255,可以用8位表示)
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
相关资源
最近更新 更多