> 백엔드 개발 > PHP 튜토리얼 > PHP中的null合并运算符,PHPnull合并运算符_PHP教程

PHP中的null合并运算符,PHPnull合并运算符_PHP教程

WBOY
풀어 주다: 2016-07-12 09:02:14
원래의
758명이 탐색했습니다.

PHP中的null合并运算符,PHPnull合并运算符

<code class="language-meta">project: blog
target: null-coalesce-operator-in-php.md
date: 2015-12-30
status: publish
tags:
    - Null Coalesce
    - PHP
categories:
    - PHP
</code>
로그인 후 복사

null合并运算符是一个好东西,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值。比如在js中可以用||来搞:

<code class="language-js">function setSomething(a){
    a = a || &#39;some-default-value&#39;;
    // ...
}
</code>
로그인 후 복사

而在PHP中,可惜PHP的||总是返回truefalse,无法这样来搞。
PHP7才正式加入了??这个运算符:

<code class="language-php">// 获取user参数的值(如果为空,则用&#39;nobody&#39;)
$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
// 等价于:
$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;
</code>
로그인 후 복사

PHP7 估计还有很长时间才能用到生产环境中,那在目前的PHP5中有没有替代方案呢?
据研究,完全有个非常便捷的替代方案:

<code class="language-php">// 获取user参数的值(如果为空,则用&#39;nobody&#39;)
$username = @$_GET[&#39;user&#39;] ?: &#39;nobody&#39;;
// 等价于:
$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;
</code>
로그인 후 복사

-- 运行此代码: https://3v4l.org/aDUW8

瞪大了眼睛看,跟前面的PHP7的例子差不多,主要是把 ?? 替换为了 ?: 。 这个是个什么鬼呢?其实这就是 (expr1) ? (expr2) : (expr3) 表达式的省略模式:

<p>表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。<br/>
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。<br/>
-- http://php.net/manual/zh/language.operators.comparison.php</p>
로그인 후 복사

当然,这个替代方案也不是完美的 —— 如果 $_GET 中没有 'user',会有一条 Notice: Undefined index: user 的错误,所以需要用@来抑制这个错误,或者关闭 E_NOTICE 的错误。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1086207.htmlTechArticlePHP中的null合并运算符,PHPnull合并运算符 project: blogtarget: null-coalesce-operator-in-php.mddate: 2015-12-30status: publishtags: - Null Coalesce - PHPcategories: - P...
관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿