IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 中的运算符 “? :“ (三元表达式)有什么作用? -> 正文阅读

[PHP知识库]PHP 中的运算符 “? :“ (三元表达式)有什么作用?

PHP 运算符 “? :” 如何使用,效果如何?

PHP 中 ?: 运算符是什么样的?
如下:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)

它是一个条件运算符。

$x ? $y : $z

表示 “如果 $x 是 true,那么采用 $y;如果不是则采用 $z” 。

它还可以简化。

$x ?: $z

表示 “如果 $x 是 true,那么采用 $x;如果不是则采用 $z” 。

有人会说 ?: 是 “三元运算符” 。这是不对的。 ?: 如果是三元运算符,那么它应该有三个操作数。 之所以这么认为是因为它通常是当前语言唯一的三元运算符。

下面将介绍什么是三元,怎么使用,什么时候使用,为什么使用,以及什么时候不能用。

什么是三元操作符?

? :ifelse 的缩写。这里中间有关于 “三元运算符” 的官方说明。

自 PHP 5.3:

从 PHP 5.3 开始,可以省略三元运算符中间部分。表达式 expr1 ?: expr3 ,如果 expr1 是 TRUE,则返回 expr1 ,否则返回 expr3 。

自 PHP 7.0

PHP 7 有新的 Null 合并运算符。这和三元运算一样,也被叫做 “isset 三元元算符” 。这可以从链式三元元算中移除 isset() 。

在 PHP 5 中,如果在一个可能不存在的变量上使用三元运算符,必须要在三元语句的开头使用 isset():

$result = isset($nonExistentVariable) ? $nonExistentVariable : ‘default’;

在 PHP 7 中,可以这样做:

$result = $nonExistentVariable ?? ‘default’;

记住 Null 合并运算符不能处理空字符串。可以链式的使用它来检查多个变量:

$user = $userImpersonatingAnotherUser ?? $loggedInUser ?? “Guest”;

PHP 中,可登录的系统,管理员冒充用户进行测试的情况并不少见。如上,如果用户不冒充另一个用户,且没有登录的话,他将成为一个访客。如果还不理解的话,继续读下去,了解一下三元运算符是什么,是如何使用的,再后过头来看看在新 PHP

怎么使用三元运算符?

正常 if 语句如下:

if (isset($_POST['hello']))
{
    $var = 'exists';
}
else
{
    $var = 'error';
}

使用三元运算符简化。

$var = isset($_POST['hello']) ? 'exists' : 'error';
                 ^            ^     ^    ^     |
                 |           then   |   else   |
                 |                  |          |
          if post isset         $var=this   $var=this

更简短,但是难理解。这不仅可以像上面这样用在变量 $var 上,还可以像下面这样在 echo 中使用,来检查变量是不是 false:

$isWinner = false;

// 输出 ‘you lose’
echo ($isWinner) ? ‘You win!’ : ‘You lose’;

// 同上
return ($isWinner) ? ‘You win!’ : ‘You lose’;

为什么要使用他们?

我觉得三元运算是迷人的。一些开发者想要表现,但是三元运算符就 不错特别是结合其他功能的时候,例如 PHP 5.4 的最新 short echos.

<?php 
    $array = array(0 => 'orange', 1 => 'multicoloured'); 
?>

<div>
<?php foreach ($array as $key => KaTeX parse error: Expected '}', got '&' at position 11: value) { ?&?gt; &lt…value===‘multicoloured’)?‘nonsense’:‘pointless’?></span>
<?php } ?>
</div>

<!-- Outputs:
<span>
pointless
</span>
<span>
nonsense
</span>
–>

稍微跑题了,在 'view/template' 中 (注意 MVC范例),如果要用上一点服务端的逻辑,使用三元运算符或者其他短句将会是最好的方式。“其他短句”,像下面这样:

if ($isWinner) :
    // Show something cool
endif;

注意,我个人不喜欢这样的无意义的短句。

三元运算符有多快?

人们喜欢微优化。也是这样做的。因此清楚三元运算比一般的 if / else 语句快多少是很重要的。

从文章了解到大约快 0.5ms。这已经快很多了!

等等,不是这样的。这个结论源于反复在一行代码中进行成千上万次的运算。因此完全不用担心,这是没有意义的。

不实用三元运算符

代码应该:

  • 易读
  • 易理解
  • 易修改

显然,这取决于看代码人的编码能力和对此类问题的理解能力。之前的简单示例没有问题,但是下面这样的,是不好的:

echo ($colour === 'red') ? "Omg we're going to die" :
     ($colour === 'blue' ? "Ah sunshine and daisies" :
     ($colour === 'green' ? "Trees are green"
     : "The bloody colour is orange, isn't it? That was pointless."));

原因如下:

  • 三元嵌套过长
  • 可以使用 switch 语句
  • 第一个应该是 orange

总结

三元运算其实很简单,没必要畏惧。不要以为有任何速度提升,真的是没有什么不同。在能够使结果简单看起来不错时使用,始终保持代码的可读性。在没有三元的情况下,不要使用三元元算符。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 14:24:59  更:2021-10-02 14:25:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 10:36:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码