目錄
回复内容:
首頁 後端開發 php教程 javascript - PHP什么情况下可以写: $a = $a or $b;

javascript - PHP什么情况下可以写: $a = $a or $b;

Jun 06, 2016 pm 08:48 PM
javascript php 程式設計

因为js经常有这样的写法,但是我在php下试了却不行,$anullfalse-1时都无效。
现在用的比较啰嗦的写法:

$a = $a?$a:$b;
$a = is_*($a)?$a:$b;
登入後複製
登入後複製

但是如何满足这样的写法:

$a = $a or $b;
登入後複製
登入後複製

回复内容:

因为js经常有这样的写法,但是我在php下试了却不行,$anullfalse-1时都无效。
现在用的比较啰嗦的写法:

$a = $a?$a:$b;
$a = is_*($a)?$a:$b;
登入後複製
登入後複製

但是如何满足这样的写法:

$a = $a or $b;
登入後複製
登入後複製

PHP是不支持$a = $a || $b;这种赋值写法的,这样写返回的是一个或运算的布尔值。(优先级请阅读 @qinjianxiang 同学的答案 )

但是,对于PHP本身提供的三元运算(expr1) ? (expr2) : (expr3)PHP5.3开始已经可以省略expr2,因此你可以简写成下面这样:

<code>$a = $a ?: $b;
</code>
登入後複製

简洁程度应该跟JS里面的a = a || b差不多吧? 但是要注意:PHP中 0、null、''(空字符串)都是==false的。

又回到了一年一度,一月一次不得不提及的PHP运算符优先级问题了!回答这个问题之前,不得不把我之前回答的一个问题链接给题主看看:PHP陷阱?

看了上面的链接你可能就会明白,实际上呢你写的这句话在PHP中根本不会完成你想要的效果,如果你还不明白的话我给你加上括号吧:

<code>($a = $a) or $b;
</code>
登入後複製

怎么样看懂了吧,从左往右读,赋值的操作比或操作优先执行,最后这句话被解析成了一个或操作,然后左边是一个将本身赋值给本身的操作,必然为true所以你会发现$a的值永远是不会变的。

最后是一句题外话,PHP目前我的认识里头好像没办法写成这种形式应该,如果有的话请告知我,谢谢!

PHP里的 || 和 or 操作符返回值都是布尔值,所以,不可能实现像Javascript和Perl里那样的a = a || b的效果了。

最接近最简洁的写法便是?:操作符:

<code>$a = $a ? $a : $b;
</code>
登入後複製

那么$a = $a or $b到底返回什么呢?且看一段测试代码:

<code><?php
$a = 0 || false;
var_dump($a);

$a = 0 or false;
var_dump($a);
</code>
登入後複製

它将输出:

bool(false)
int(0)

为什么输出不一样?因为 || 和 or 两个操作符的优先级不一样:

  • ||优先级比=高,所以,$a = $a || $b,等同于$a = ($a || $b),是先拿$a, $b求或,得到一个boolean,再把这个boolean赋值给$a
  • or优先级比=低,所以,$a = $a or $b,等同于($a = $a) or $b,先执行$a = $a,再把$a的值和$b执行or操作,但操作结果不赋值给任何变量,所以你观察不到$a的值被改变

PHP操作符优先级:http://www.php.net/manual/en/language.operators.precedence.php

挖坟的问题了,一直忘了结贴,现在自问自答,就当给sf做个seo吧.
楼上说的都对,现在PHP7开始有了??操作符就是做这个事情的.

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

您如何在PHP中解析和處理HTML/XML?

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

php程序在字符串中計數元音

編碼的關鍵:為初學者釋放 Python 的力量 編碼的關鍵:為初學者釋放 Python 的力量 Oct 11, 2024 pm 12:17 PM

編碼的關鍵:為初學者釋放 Python 的力量

Java 變得簡單:程式設計能力的初學者指南 Java 變得簡單:程式設計能力的初學者指南 Oct 11, 2024 pm 06:30 PM

Java 變得簡單:程式設計能力的初學者指南

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

創造未來:零基礎的 Java 編程

使用 Python 解決問題:作為初學者,解鎖強大的解決方案 使用 Python 解決問題:作為初學者,解鎖強大的解決方案 Oct 11, 2024 pm 08:58 PM

使用 Python 解決問題:作為初學者,解鎖強大的解決方案

See all articles