首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP中的测试变量

PHP中的测试变量
EN

Stack Overflow用户
提问于 2011-09-21 14:11:00
回答 7查看 422关注 0票数 1

今天早些时候我试着这样做:

示例1:

代码语言:javascript
运行
复制
<?php 

  echo $myVar || "rawr";

?>

我认为如果设置了$myVar,它可能会打印出来,如果没有,则打印"rawr"。它打印了一个1,我假设这是OR测试的结果。

我当时尝试的是:

示例2:

代码语言:javascript
运行
复制
<?php
  if ($myVar)
  {
    echo $myVar;
  }
  else
  {
    echo "rawr";
  }
?>

这就是我想要达到的目标。

我想我理解为什么第一次打印OR测试的结果而不是其中的一个变量,以及为什么我尝试它-最近花了一些时间在bash上:)

有人能告诉我是否有方法在示例2中执行文本,但使用与示例1类似的语法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-21 14:21:12

在这个部门中,PHP是出了名的不雅之处,而且没有一种好的方法来进行这个测试。

作为一种通用解决方案,您需要像在empty($var) ? "rawr" : $var中那样使用三元操作符。然而,在实践中,所发生的情况是有以下两种情况之一:

1.您自己的变量

在这种情况下,您自己定义变量,最好的解决方案就是在定义变量的位置(可能是用三元操作符)给它一个已知的默认值。

2.在数组

如果数组是一个不应该像超级全局那样被触摸的数组,那么您可以将测试封装在一个函数中(这几乎是每个人都要做的)。

如果数组是您管辖范围内的数组,但它来自外部源,则可以使用“添加默认值”技巧:

代码语言:javascript
运行
复制
$incoming = array(...);
$defaults = array("foo" => "bar");

// Inject the defaults into $incoming without overwriting existing values
$incoming += $defaults;

此时,您知道一个事实,即$defaults中的每个键也存在于$incoming中。

票数 2
EN

Stack Overflow用户

发布于 2011-09-21 14:17:21

PHP 5.3:

代码语言:javascript
运行
复制
 echo $myVar ?: 'rawr';

5.3前:

代码语言:javascript
运行
复制
 echo $myVar ? $myVar : 'rawr';

如果没有设置$myVar,就必须使用isset($myVar) and $myVar作为条件(这样就不能使用简写的?:语法,因为如果设置了1,而不是值)。

代码语言:javascript
运行
复制
 echo (isset($myVar) and $myVar) ? $myVar : 'rawr';
票数 3
EN

Stack Overflow用户

发布于 2011-09-21 14:18:21

在PHP中,可以省略第二个参数:

代码语言:javascript
运行
复制
echo $myVar ?: 'rawr';

这可能最接近你想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7501265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档