web-dev-qa-db-ja.com

リファレンス— PHPでこの記号はどういう意味ですか?

これは何ですか?

これは、PHPの構文について時々出てくる質問の集まりです。これはコミュニティWikiでもあるため、誰もがこのリストの管理に参加するよう招待されています。

どうしてこれなの?

以前は、演算子やその他の構文トークンに関する質問を見つけるのは困難でした。¹
主なアイデアは、Stack Overflowの既存の質問へのリンクを作成することです。したがって、PHPマニュアルの内容をコピーするのではなく、それらを参照する方が簡単です。

注:2013年1月以降、スタックオーバーフロー は特殊文字 をサポートしています。検索語句を引用符で囲むだけです。 [php] "==" vs "==="

ここで何をすべきですか?

あなたがそのような質問をしたために誰かからここに指摘されたなら、以下の特定の構文を見つけてください。 PHPマニュアル へのリンクされたページとリンクされた質問は、おそらくあなたの質問に答えます。もしそうなら、あなたは答えに賛成票を投じることをお勧めします。このリストは、他の人が提供するヘルプの代わりになるものではありません。

リスト

特定のトークンが以下にリストされていない場合、 パーサートークンのリスト で見つけることができます。


&Bitwise Operators または References


=&参照


&=ビットごとの演算子


&&論理演算子


%算術演算子


!!論理演算子


@エラー制御演算子


?:三項演算子


??Null Coalesce Operator (PHP 7以降)

  • PHP のC#のnull合体演算子(??)

?string?int?array?bool?floatNullable戻り値の型宣言 (PHP 7.1以降)


:制御構造の代替構文三項演算子


::Scope Resolution Operator


\名前空間


->クラスとオブジェクト


=>配列


^ビットごとの演算子


>>ビットごとの演算子


<<ビットごとの演算子


<<<HeredocまたはNowdoc


=割り当て演算子


==比較演算子


===比較演算子


!==比較演算子


!=比較演算子


<>比較演算子


<=>比較演算子 (PHP 7.0以降)


|ビットごとの演算子


||論理演算子


~ビットごとの演算子


+算術演算子配列演算子


+=および-=割り当て演算子


++および--インクリメント/デクリメント演算子


.=割り当て演算子


.文字列演算子


,関数の引数

,変数宣言


$$変数


`実行演算子


<?=ショートオープンタグ


[]Arrays (PHP 5.4以降の短い構文)


<?開始タグと終了タグ


...引数のアンパック (PHP 5.6以降)


**べき乗 (PHP 5.6以降)


#1行のシェルスタイルのコメント


:?Nullable return types


4233
Gordon

インクリメント/デクリメント演算子

++インクリメント演算子

--デクリメント演算子

Example    Name              Effect
---------------------------------------------------------------------
++$a       Pre-increment     Increments $a by one, then returns $a.
$a++       Post-increment    Returns $a, then increments $a by one.
--$a       Pre-decrement     Decrements $a by one, then returns $a.
$a--       Post-decrement    Returns $a, then decrements $a by one.

これらは変数の前でも後でも構いません。

変数の前に置くと、変数 first に対して増減演算が行われ、結果が返されます。変数の後に置くと、変数は first が返された後、増分/減分操作が行われます。

例えば:

$apples = 10;
for ($i = 0; $i < 10; ++$i) {
    echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}

実際の例

上の場合は++$iが使われています。 $i++も同じ結果になります。

事前インクリメントは、変数を実際にインクリメントし、その後結果を「返す」ので、少し速くなります。ポストインクリメントは特別な変数を作成し、そこに最初の変数の値をコピーし、最初の変数が使用された後にのみ、その値を秒の値に置き換えます。

ただし、最初に現在のりんごの数を表示したい場合は$apples--を使用し、それから1を引いた場合は 次に を使用する必要があります。

PHPでは文字を増やすこともできます。

$i = "a";
while ($i < "c") {
    echo $i++;
}

zに到達すると、aaが次に続きます。

文字変数はインクリメントすることはできますがデクリメントすることはできず、そのためプレーンのASCII文字(a-zとA-Z)のみがサポートされます。


スタックオーバーフローポスト:

1062
Peter Ajtai

ビット演算子

少しは何ですか?ビットは1または0を表します。基本的にはOFF(0)およびON(1)

バイトとは1バイトは8ビットで構成され、バイトの最大値は255です。これは、すべてのビットが設定されることを意味します。バイトの最大値が255なのはなぜでしょうか。

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------

1バイトのこの表現

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255(1バイト)

理解を深めるためのいくつかの例

"AND"演算子:&

$a =  9;
$b = 10;
echo $a & $b;

これは数字8を出力します。なぜでしょうか。テーブルの例を使ってみましょう。

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      &     |   0|  0|  0|  0| 1| 0| 0| 0|
------------------------------------------- 

だからあなたはテーブルからそれらが一緒に共有する唯一のビットは8ビットであることがわかります。

2番目の例

$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

2つの共有ビットは32と4です。これらを合計すると36が返されます。

"Or"演算子:|

$a =  9;
$b = 10;
echo $a | $b;

これは数字11を出力します。なぜでしょうか。

-------------------------------------------
|      1 Byte ( 8 bits )                  |
-------------------------------------------
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
-------------------------------------------
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
-------------------------------------------
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
------------------------------------------- 
|      |     |   0|  0|  0|  0| 1| 0| 1| 1|
-------------------------------------------

8、2、および1列に3ビットが設定されていることがわかります。それらを合計してください:8 + 2 + 1 = 11。

406
Ankur Saxena

_gettext()のエイリアス

_()のように下線文字「_」は gettext() 関数の別名です。

254
Habeeb Perwad
Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"
245
Ankur Saxena

<=>宇宙船オペレーター

PHP 7に追加

スペースシップ演算子<=>は、PHP 7.で追加された最新の比較演算子です。non-associative等号演算子(==!====!==)と同じ優先順位を持つ二項演算子。この演算子を使用すると、左オペランドと右オペランドの3者間比較が簡単になります。

演算子の結果は次の整数式になります。

  • 0両方のオペランドが等しい場合
  • 左側のオペランドが右側のオペランドより小さい場合、0より小さい
  • 左側のオペランドが右側のオペランドより大きい場合、0より大きい

例えば.

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

この演算子を使用する良い実用的なアプリケーションは、2つの値の3者間比較に基づいてゼロ、負、または正の整数を返すことが期待される比較型コールバックです。 usort に渡される比較関数はその一例です。

PHP 7の前に次のように記述します...

$arr = array(4,2,1,3);

usort($arr, function ($a, $b) {
    if ($a < $b) {
        return -1;
    } elseif ($a > $b) {
        return 1;
    } else {
        return 0;
    }
});

PHP 7以降、次のように記述できます...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
});
245
Sherif

魔法の定数 :これらは単なる記号ではなく、このトークンファミリの重要な部分です。使われている場所によって変わる8つの魔法の定数があります。

__LINE__:ファイルの現在の行番号.

__FILE__:ファイルのフルパスとファイル名インクルード内で使用されている場合は、インクルードファイルの名前が返されます。 PHP 4.0.2以降、__FILE__にはシンボリックリンクが解決された絶対パスが常に含まれますが、旧バージョンでは状況によっては相対パスが含まれていました。

__DIR__:ファイルのディレクトリインクルード内で使用されている場合は、インクルードファイルのディレクトリが返されます。これはdirname(__FILE__)と同等です。このディレクトリ名は、ルートディレクトリでない限り末尾にスラッシュを付けません。 (PHP 5.3.0で追加されました。)

__FUNCTION__:関数名(PHP 4.3.0で追加)PHP 5以降、この定数は宣言されたときの関数名を返します(大文字と小文字を区別します)。 PHP 4では、その値は常に小文字です。

__CLASS__:クラス名(PHP 4.3.0で追加)PHP 5以降、この定数は宣言されたとおりにクラス名を返します(大文字と小文字は区別されます)。 PHP 4では、その値は常に小文字です。クラス名は、それが宣言された名前空間を含みます(例:Foo\Bar)。 PHP 5.4 __CLASS__はトレイトでも機能することに注意してください。特性メソッドで使用される場合、__CLASS__は特性が使用されるクラスの名前です。

__TRAIT__:特性の名前(PHP 5.4.0で追加)PHP 5.4以降、この定数は宣言されたとおりにトレイトを返します(大文字と小文字を区別します)。特性名には、宣言された名前空間が含まれます(例:Foo\Bar)。

__METHOD__:クラスメソッド名(PHP 5.0.0で追加)メソッド名は宣言されたとおりに返されます(大文字と小文字を区別)。

__NAMESPACE__:現在のネームスペースの名前(大文字と小文字を区別)この定数はコンパイル時に定義されます(PHP 5.3.0で追加)。

出典

216
Sumoanand

型演算子

instanceofは、PHP変数が特定のクラスのインスタンス化されたオブジェクトかどうかを判断するために使用されます。

<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);

上記の例は出力されます:

bool(true)
bool(false)

理由: 上記の例$amclassのオブジェクトなので、mclassのインスタンスではなくsclassデータのみを使用してください

継承の例

<?php 
class pclass { } 
class childclass extends pclass { } 
$a = new childclass; 
var_dump($a instanceof childclass); 
var_dump($a instanceof pclass);

上記の例は出力されます:

bool(true)
bool(true)

クローンを使用した例

<?php 
class cloneable { } 
$a = new cloneable;
$b = clone $a; 
var_dump($a instanceof cloneable); 
var_dump($b instanceof cloneable);

上記の例は出力されます:

bool(true)
bool(true)
136
Maulik patel

PHPの演算子 :の概要


論理演算子:

  • $ a && $ b:$ aと$ bの両方がTRUEの場合はTRUE。
  • $ a || $ b:$ aまたは$ bがTRUEの場合はTRUE。
  • $ a xor $ b:$ aまたは$ bのいずれかがTRUEの場合はTRUE、両方ではない場合はTRUE。
  • !$ a:$ aがTRUEでない場合はTRUE。
  • $ aと$ b:$ aと$ bの両方がTRUEの場合はTRUE。
  • $ aまたは$ b:$ aまたは$ bがTRUEの場合はTRUE。

比較演算子:

  • $ a == $ b:$ jが型ジャグリング後に$ bと等しい場合はTRUE。
  • $ a === $ b:$ aが$ bと等しい場合、これらは同じ型です。
  • $ a!= $ b:ジャグリング後に$ aが$ bと等しくない場合はTRUE。
  • $ a <> $ b:ジャグリング後に$ aが$ bと等しくない場合はTRUE。
  • $ a!== $ b:$ aが$ bと等しくない場合、または同じタイプでない場合はTRUE。
  • $ a <$ b:$ aが厳密に$ bより小さければTRUE。
  • $ a> $ b:$ aが厳密に$ bより大きい場合はTRUE。
  • $ a <= $ b:$ aが$ b以下の場合はTRUE。
  • $ a> = $ b:$ aが$ b以上の場合はTRUE。
  • $ a <=> $ b:$ aがそれぞれ$ b以下、$ b以上の場合、ゼロ以下、ゼロ以上の整数。PHPから利用可能_ 7。
  • $ a?$ b:$ c:$ aが$ bを返す場合は$ b、それ以外は$ cを返す( 三項演算子
  • $ a ?? $ c:$ a?$ a:$ cと同じ( null合体演算子 - PHPが必要>> = 7))

算術演算子:

  • - $ a:$ aの反対です。
  • $ a + $ b:$ aと$ bの合計。
  • $ a - $ b:$ aと$ bの差。
  • $ a * $ b:$ aと$ bの積。
  • $ a/$ b:$ aと$ bの商。
  • $ a%$ b:$ aを$ bで割った余り。
  • $ a ** $ b:$ aを$ bのべき乗にした結果(PHP 5.6で導入)

インクリメント/デクリメント演算子:

  • ++ $ a:$ aを1つインクリメントしてから$ aを返します。
  • $ a ++:$ aを返し、次に$ aを1つインクリメントします。
  • - $ a:$ aを1つ減らして$ aを返します。
  • $ a--:$ aを返し、$ aを1つ減らします。

ビット演算子

  • $ a&$ b:$ aと$ bの両方に設定されているビットが設定されます。
  • $ a | $ b:$ aまたは$ bに設定されているビットが設定されます。
  • $ a ^ $ b:$ aまたは$ bに設定されているが両方に設定されていないビット。
  • 〜$ a:$ aに設定されているビットは設定されず、その逆も同様です。
  • $ a << $ b:$ a $ bステップのビットを左にシフトします(各ステップは「2で乗算」を意味します)
  • $ a >> $ b:$ a $ bステップのビットを右にシフトします(各ステップは「2で割る」という意味です)

文字列演算子:

  • $ a。$ b:$ aと$ bの連結.

配列演算子:

  • $ a + $ b:$ aと$ bの和。
  • $ a == $ b:$ aと$ bが同じキー/値ペアを持つ場合はTRUE。
  • $ a === $ b:$ aと$ bが同じ順序で同じ型の同じキー/値ペアを持つ場合はTRUE。
  • $ a!= $ b:$ aが$ bと等しくない場合はTRUE。
  • $ a <> $ b:$ aが$ bと等しくない場合はTRUE。
  • $ a!== $ b:$ aが$ bと同一でない場合はTRUE。

代入演算子

  • $ a = $ b:$ bの値は$ aに代入されます
  • $ a + = $ b:$ a = $ a + $ bと同じ
  • $ a - = $ b:$ a = $ a - $ bと同じ
  • $ a * = $ b:$ a = $ a * $ bと同じ
  • $ a/= $ b:$ a = $ a/$ bと同じ
  • $ a%= $ b:$ a = $ a%$ bと同じ
  • $ a ** = $ b:$ a = $ a ** $ bと同じ
  • $ a。= $ b:$ a = $ a。$ bと同じ
  • $ a&= $ b:$ a = $ a&$ bと同じ
  • $ a | = $ b:$ a = $ a | $ bと同じ
  • $ a ^ = $ b:$ a = $ a ^ $ bと同じ
  • $ a << = $ b:$ a = $ a << $ bと同じ
  • $ a >> = $ b:$ a = $ a >> $ bと同じ

注意

and演算子とor演算子は、代入演算子=よりも優先順位が低くなります。

これは$a = true and false;($a = true) and falseと同等であることを意味します。

たいていの場合、あなたはおそらく&&||)を使いたいでしょう。これらはC、JavaあるいはJavaScriptのような言語から知られている方法で振る舞います。

117
John Slegers

宇宙船演算子<=>(PHP 7に追加)

<=>宇宙船オペレーターの例(PHP 7、ソース:PHP Manual):

変数の3者間比較のための整数、浮動小数点数、文字列、配列、オブジェクト。

// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
// Comparison is case-sensitive
echo "B" <=> "a"; // -1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1

$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1

// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1
92
rajangupta

{}中括弧

そして最後の投稿についてのいくつかの言葉

$x[4] = 'd'; // it works
$x{4} = 'd'; // it works

$echo $x[4]; // it works
$echo $x{4}; // it works

$x[] = 'e'; // it works
$x{} = 'e'; // does not work

$x = [1, 2]; // it works
$x = {1, 2}; // does not work

echo "${x[4]}"; // it works
echo "${x{4}}"; // does not work

echo "{$x[4]}"; // it works
echo "{$x{4}}"; // it works
64
mnv

PHP文字列: PHP文字列は、2つの方法だけでなく4つの方法で指定できます。

1)一重引用符ストリング:

$string = 'This is my string'; // print This is my string

2)二重引用符ストリング:

$str = 'string';

$string = "This is my $str"; // print This is my string

3)Heredoc:

$string = <<<EOD
This is my string
EOD; // print This is my string

4)Nowdoc(PHP 5.3.0以降):

$string = <<<'END_OF_STRING'
    This is my string 
END_OF_STRING; // print This is my string
56
devpro

NULL合体演算子(??)

isset()と組み合わせて3項演算子を使用する必要があるという一般的なケースのために、この演算子はPHP 7.0に追加されました。最初のオペランドが存在し、それがNULLでなければそれを返します。それ以外の場合は2番目のオペランドを返します。

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
55
VIPIN A ROY

質問:

=>はどういう意味ですか?


ANSWER:

=>は、人間が連想配列の"Key" => "Value"ペアを分離するために使用することにしたシンボルです。

ELABORATING:

これを理解するには、連想配列とは何かを知る必要があります。従来のプログラマーが配列(PHP)を考えるときに最初に現れるのは、次のようなものです。

$myArray1 = array(2016, "hello", 33);//option 1

$myArray2 = [2016, "hello", 33];//option 2

$myArray3 = [];//option 3
$myArray3[] = 2016; 
$myArray3[] = "hello"; 
$myArray3[] = 33;

コードの後半部分で配列を呼び出したい場合は、次のようにします。

echo $myArray1[1];// output: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello

ここまでは順調ですね。ただし、人間としては、配列のインデックス[0]year 2016の値であり、配列のインデックス[1]がaであることを覚えにくい場合があります。 greetings、および配列のインデックス[2]は単純な整数値です。その場合の代替案は、連想配列と呼ばれるものを使用することです。連想配列には、Sequential Arrayとはいくつかの違いがあります。これは、事前に決められたシーケンスで使用されるインデックスを1ずつインクリメントするため、前のケースと同じです。次の各値に対して)。

違い(順次配列と連想配列の間):

  • 連想配列の宣言中に、配列に入れたいもののvalueだけでなく、必要なインデックス値(keyと呼ばれる)も入れます。コードの後の部分で配列を呼び出すときに使用します。次の構文が宣言中に使用されます:"key" => "value"

  • 連想配列を使用する場合、key値は配列のインデックス内に配置され、目的のvalueを取得します。

例えば:

    $myArray1 = array( 
        "Year" => 2016, 
        "Greetings" => "hello", 
        "Integer_value" => 33);//option 1

    $myArray2 = [ 
        "Year" =>  2016, 
        "Greetings" => "hello", 
        "Integer_value" => 33];//option 2

    $myArray3 = [];//option 3
    $myArray3["Year"] = 2016; 
    $myArray3["Greetings"] = "hello"; 
    $myArray3["Integer_value"] = 33;

そして今、以前と同じ出力を受け取るために、配列インデックスでkey値が使用されます。

echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello

最終ポイント:

したがって、上記の例から、配列のkeyvalueの各ペアの間の連想配列の関係を表すために=>シンボルが使用されていることが簡単にわかります- DURING配列内の値の開始。

42
Webeng

質問

PHPで「&」とはどういう意味ですか?

PHP "&"演算子

慣れればもっと楽になります。(下の例をよく確認してください)

は通常、$ aと$ bの両方に設定されているビットが設定されていることを確認します。

あなたはこれらの呼び出しがどのように機能するのか気づいたことさえありますか?

   error_reporting(E_ERROR | E_WARNING | E_PARSE);
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    error_reporting(E_ALL & ~E_NOTICE);
    error_reporting(E_ALL);

だから上記のすべての背後にあるビット演算子とビットのゲームです。

これらの便利なケースの1つは、以下のような簡単な設定です。そのため、1つの整数フィールドに何千ものコンボを格納できます。

ほとんどの人はすでにドキュメントを読んでいますが、これらのビット演算子の実際のユースケースには依存しませんでした。

例あなたが愛していること

<?php

class Config {

    // our constants must be 1,2,4,8,16,32,64 ....so on
    const TYPE_CAT=1;
    const TYPE_DOG=2;
    const TYPE_LION=4;
    const TYPE_RAT=8;
    const TYPE_BIRD=16;
    const TYPE_ALL=31;

    private $config;

    public function __construct($config){
        $this->config=$config;

        if($this->is(Config::TYPE_CAT)){
            echo 'cat ';
        }
        if($this->is(Config::TYPE_DOG)){
            echo 'dog ';
        }
        if($this->is(Config::TYPE_RAT)){
            echo 'rat ';
        }
        if($this->is(Config::TYPE_LION)){
            echo 'lion ';
        }
        if($this->is(Config::TYPE_BIRD)){
            echo 'bird ';
        }
        echo "\n";
    }

    private function is($value){
        return $this->config & $value;
    }
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird
30
dev.meghraj

==は、変数data-typeを考慮して、等価検査なしに使用されます。

===は、both変数value *と** data-typeの等価性をチェックするために使用されます。

$a = 5

  1. if ($a == 5) - 真と評価されます

  2. if ($a == '5') - この両方の値を比較している間phpは内部的にその文字列値を整数に変換してから両方の値を比較するのでtrueに評価されます

  3. if ($a === 5) - 真と評価されます

  4. if ($a === '5') - valueは5なのでfalseと評価されますが、この5は整数ではありません。

23
Parth Nayak

Null Coalesce Operator php

Isset()と組み合わせて3項を使用する必要があるという一般的な場合のために、null合体演算子(??)がPHP 7に追加されました。最初のオペランドが存在する場合はそれを返し、NULLでない場合は次の例のように2番目のオペランドを返します。

$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; 
22
mshomali

NULL合体演算子 "??" (PHP 7に追加)

演算子の最もわかりにくい名前ではありませんが、PHP 7はかなり便利なnull合体をもたらすので、例を共有したいと思いました。

PHP 5には、値をテストし、それがtrueを返す場合は2番目の要素を返し、そうでない場合は3番目の要素を返す三項演算子が既にあります。

echo $count ? $count : 10; // outputs 10

それが最初のものと同じであるなら、あなたが2番目の要素を飛ばすことを可能にするそれのための速記もあります:echo $ count?:10; // 10も出力

PHP 7では、さらに??を取得します。 2つの疑問符を通常一緒に使用する方法である極端な混乱を示すのではなく、一連の値を連鎖させることができます。左から右へ読んで、存在していてnullではない最初の値が返される値です。

// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16

この構成は、おそらくユーザー入力または既存の構成から来る1つ以上の値を優先し、その構成が欠落している場合は指定されたデフォルトに安全に戻るために役立ちます。これはちょっとした機能ですが、アプリケーションがPHP 7にアップグレードされたらすぐに使用する予定です。

20
Yogi Ghorecha

NULL可能な戻り型宣言

PHP 7では、戻り型の宣言のサポートが追加されました。引数型宣言と同様に、戻り型宣言は関数から返される値の型を指定します。引数の型宣言に使用できるものと同じ型が、戻り型の宣言に使用できます。

厳密な型指定は、戻り型の宣言にも影響します。デフォルトのweakモードでは、戻り値がまだその型でない場合、戻り値は正しい型に変換されます。ストロングモードでは、戻り値は正しい型でなければなりません、そうでなければ、TypeErrorが投げられます。

PHP 7.1.0以降では、型名の前に疑問符(?)を付けることで、戻り値をNULL可能にすることができます。これは、関数が指定された型またはNULLを返すことを意味します。

<?php
function get_item(): ?string {
    if (isset($_GET['item'])) {
        return $_GET['item'];
    } else {
        return null;
    }
}
?>

出典

6
John Conde