iT邦幫忙

0

php ??意思

如題
在看 https://youtu.be/GTESlsYTUns

想問中間那個??代表什麼

$path = $_SERVER['REQUEST_URI'] ?? false 

2 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2020-12-24 07:39:05
最佳解答

參考資料來源

It returns its first operand if it exists and is not NULL; otherwise it returns its second operand.

$foo = $bar ?? 'something';
$foo = isset($bar) ? $bar : 'something';
James iT邦大師 6 級 ‧ 2020-12-24 07:45:03 檢舉

第一次看到這種寫法,很直覺應該很好用。

b35382246 iT邦新手 5 級 ‧ 2020-12-24 08:19:38 檢舉

感謝回答
直接Google php?? 只會出現 何謂php

ccutmis iT邦高手 4 級 ‧ 2020-12-24 08:34:23 檢舉

建議樓主下次改用英文描述的方式問
例如搜 php double question mark
第一條就是stackoverflow的相關討論"
What does double question mark (??) operator mean in PHP ..."

8

這個用法是php7之後才有的用法。

算是早期的三元判斷式的一種追加的方式。

早期要判斷是否變數存在, 不存在給預設值。是需要利用if或是三元判斷式來處理
如:

    $data = isset($data) ? $data : 'data';
    //或
    if(!isset($data)){
        $data = 'data';
    }

但7版後,可以用

    $data = $data ?? 'data';

這樣的方式處理。

另外追加一個也是7版的三元判斷式的用法「?:」

早期要判斷有無值是需要

    $data = $data ? $data : 'data';

7版後可以將其寫成

    $data = $data ?: 'data';

「?:」與「??」看起來用法雖然相同。
但其意義並不太一樣。

一種是判斷值是否為空值有無資料。如果該值不存在,是有可能會報錯。
(如果php是嚴格模式的話)

具了解「??」的用法,就是為了要配合嚴格模式下生出來的用法。

coder iT邦新手 5 級 ‧ 2020-12-25 18:35:23 檢舉

看官方文件 ?: 好像 PHP 5.3+ 就可以了

我要發表回答

立即登入回答