【问题标题】:PHP Trouble with String Comparisons字符串比较的 PHP 问题
【发布时间】:2012-02-08 18:11:02
【问题描述】:

我正在编写一个相对简单的 if 语句来处理 Web 服务的响应

以下代码将输出返回的数据类型及其值:

$response = $client->__getLastResponse();
echo $response;
echo gettype($response);

对于正确的响应,我得到“真正的字符串”
对于不正确的响应,我得到“假字符串”

所以我需要一个if语句来处理它的真假:

if($response == "true"){
    echo "Logged In";
} else {
    echo "Not Logged In";
}

无论我收到什么回复,我总是收到“未登录”

我也尝试过 === 运算符,但无济于事。

有人可以帮忙吗?

【问题讨论】:

  • 如果你得到"true string",这意味着响应变量包含"true "(最后一个空格),而不是"true"。此外,var_dump($response) 是一种更简洁的显示值和类型的方式 - 你能告诉我们它输出什么吗?
  • string(536) " true " 这确实意味着有一个空格。
  • 我已经回答过了。你得到的真的是true string 还是只是true 作为一个字符串?
  • 错误是来自 web 服务的响应(不是我可能添加的我自己的设计)返回 536 个字符以显示单词 true

标签: php string comparison operators


【解决方案1】:

对于正确的响应,我得到“真正的字符串” 对于不正确的响应,我得到“假字符串”

如果那是你的实际代码,你有 echo $response . gettype( $response ) 产生“真正的字符串”,对吧?如果是这样,“真”后面有一个空格。尝试修剪响应:

<?php
$response = $client->__getLastResponse();
if( strtolower( trim( $response ) ) === 'true' ) {
   echo 'response is true.';
}

除此之外,使用var_dump 进行调试非常容易,因为它会在值和字符串的总长度周围显示引号,从而更容易发现额外的空间弹出窗口。

【讨论】:

  • 你过多的空白使用非常难看。
  • @ThiefMaster Aww,感谢您抽出宝贵时间与我分享。实际上,我发现它更具可读性。
  • 对于我这样的人来说,太过分了。除非必须,否则我不使用空间。请参阅我的答案中的代码示例
  • 有趣,我通常认为用这么多空格很难阅读,因为属于一起的东西是分开的......已经在 jquery 源代码中讨厌它。
  • @ThiefMaster 好吧,我能说什么呢?编码风格是个人的,这恰好是我的。您可能会争辩说这不是大多数开发人员使用的,但是我的 IDE 可以重新格式化 ;)
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多