リファレンス—この記号はPHPで何を意味しますか?

2010-09-18 php arguments operators symbols

これは何ですか?

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

どうしてこれなの?

以前は、演算子やその他の構文トークンに関する質問を見つけるのは困難でした。¹
主なアイデアは、Stack Overflowの既存の質問へのリンクを用意することです。これにより、PHPマニュアルからコンテンツをコピーするのではなく、参照しやすくなります。

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

ここで何をしますか?

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

リスト

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


& ビットごとの演算子または参照


=& 文献


&= ビット演算子


&& 論理演算子


% 算術演算子


!! 論理演算子


@ エラー制御演算子


?: 三項演算子


?? Null Coalesceオペレーター (PHP 7以降)


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


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


:: スコープ解決演算子


\ 名前空間


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


=> 配列


^ ビット演算子


>> ビット演算子


<< ビット演算子


<<< HeredocまたはNowdoc


= 代入演算子


== 比較演算子


=== 比較演算子


!== 比較演算子


!= 比較演算子


<> 比較演算子


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


| ビット演算子


|| 論理演算子


~ ビット演算子


+ 算術演算子配列演算子


+=および-= 代入演算子


++および-- 増分/減分演算子


.= 代入演算子


. 文字列演算子


, 関数の引数

, 変数宣言


$$ 変数変数


` 実行演算子


<?= 短いオープンタグ


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


<? 開始タグと終了タグ


... 引数の解凍 (PHP 5.6以降)


** べき乗 (PHP 5.6以降)


# 1行のシェル形式のコメント


:? null可能な戻り値の型


?-> NullSafeオペレーターコール


Answers

演算子の増分/減分

++増分演算子

--デクリメント演算子

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.

これらは変数の前または後に置くことができます。

変数の前に置くと、 最初に変数に対してインクリメント/デクリメント操作が行われ、次に結果が返されます。変数の後に置くと、変数が最初に返され、次にインクリメント/デクリメント操作が行われます。

例えば:

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

実例

上記の場合、 ++$iが使用されます。 $i++も同じ結果になります。

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

ただし、 $apples--使用する必要があります。最初に現在のリンゴの数を表示し、 次にリンゴの数を1から減算するためです。

PHPで文字をインクリメントすることもできます。

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

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

文字変数はインクリメントできますがデクリメントできないことに注意してください。さらに、プレーンASCII文字(azおよびAZ)のみがサポートされています。


スタックオーバーフローの投稿:

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
x or y     Or              True if any of x or y are true x=6 y=3
                           (x < 10 or y > 10) returns true 
x || y     Or              True if any of x or y are true x=6 y=3
                           (x < 3 || y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"

ビット演算子

少しは何ですか?ビットは、1または0の表現です。基本的に、OFF(0)およびON(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を返します。

「または」演算子: |

$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。

_ gettext()のエイリアス

_()のようなアンダースコア文字 '_'は、 gettext()関数のエイリアスです。

マジック定数 :これらは単なるシンボルではなく、このトークンファミリの重要な部分です。それらが使用される場所に応じて変化する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で追加)。

ソース

タイプ演算子

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

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

上記の例は出力します:

bool(true)
bool(false)

理由:上記の例$aの目的であるmclass使用これだけ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)

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

PHP 7で追加

宇宙船演算子 <=>は、PHP 7で追加された最新の比較演算子です。これは、等価演算子( ==!====!== )と同じ優先順位を持つ非結合二項演算子です。この演算子を使用すると、左側のオペランドと右側のオペランドを簡単に3者間で比較できます。

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

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

例えば

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

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

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

$arr = [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;
});

宇宙船オペレーター<=> (PHP 7で追加)

<=>宇宙船オペレーターの例(PHP 7、出典:PHPマニュアル):

変数の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

{}中括弧

そして最後の投稿について

$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

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)ヒアドキュメント:

$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

#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:タイプジャグリング後の$ 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以下の場合はTRUE。
  • $ a> = $ b$ aが$ b以上の場合はTRUE。
  • $ a <=> $ b$ aがそれぞれ$ bより小さい、等しい、または大きい場合、ゼロより小さい、等しい、または大きい整数。 PHP 7以降で使用できます。
  • $ a? $ b:$ c :$ aが$ bを返す場合、それ以外は$ c( 3項演算子 )を返します
  • $ 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と同じ
  • $ a ?? = $ b :$ aがnullまたは定義されていない場合、$ bの値が$ aに割り当てられます( nullの合体代入演算子 -PHP> = 7.4が必要)

###注意

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

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

ほとんどの場合、おそらく&&||を使いたいでしょう。 、C、Java、JavaScriptなどの言語で知られている方法で動作します。

質問:

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


回答:

=>連想配列で"Key" => "Value"ペアを分離するために人間が使用することを決めた記号です。

エラボレート:

これを理解するには、連想配列とは何かを知る必要があります。従来のプログラマーが( 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]配列のインデックスは、2016 の値である[1]配列のあるグリーティング 、およびインデックス[2]配列のシンプルであります整数値 。もう1つの方法は、 連想配列と呼ばれるものを使用することです。連想配列には、 順次配列といくつかの違いがあります ( 前のケースでは、次の値ごとに1ずつインクリメントすることにより、所定のシーケンスで使用されるインデックスをインクリメントするため、これがそうでした )。

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

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

  • 連想配列を使用する場合、 key値を配列のインデックス内に配置して、目的のvalueを取得し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配列内の値の開始中に 、アレイ内のペア。

ヌル合体演算子(??)

この演算子は、三項演算子をisset()と組み合わせて使用​​する必要がある一般的なケースのために、PHP 7.0で追加されました。存在していてNULLでない場合は、最初のオペランドを返し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';
?>

質問

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つは、以下のような簡単な設定です。そのため、単一の整数フィールドに数千のコンボを格納できます。

ほとんどの人はすでにドキュメントを読んでいますが、これらのビット単位演算子の実際の使用例に依存していません。

例あなたが好きになること

<?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

==変数のデータ型 考慮せずに等しいかどうかをチェックするために使用されます

===は、変数値データ型の 両方の同等性のチェックに使用されます

$a = 5

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

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

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

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

ヌルコアレス演算子「??」 (PHP 7で追加)

オペレーターにとって最もわかりやすい名前ではありませんが、PHP 7はかなり便利なnull合体を持っているので、例を挙げましょう。

PHP 5には、値をテストする3項演算子が既にあり、2番目の要素がtrueを返す場合は3番目の要素を返し、そうでない場合は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つ以上の値を優先し、その構成が欠落している場合は指定されたデフォルトに安全にフォールバックするのに役立ちます。これは小さな機能の1つですが、アプリケーションがPHP 7にアップグレードされるとすぐに使用することがわかっています。

null可能な戻り型宣言

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

厳密な型指定は、戻り型の宣言にも影響を与えます。デフォルトのウィークモードでは、戻り値は正しい型に強制されます(まだその型でない場合)。ストロングモードでは、戻り値は正しいタイプである必要があります。そうでない場合、TypeErrorがスローされます。

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

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

ソース

スプラット演算子としての3つのDOTS(...) (PHP 5.6以降)

PHPには、Splatオペレーターと呼ばれるオペレーター「...」(3つのドット)があります。関数内の任意の数のパラメーターを渡すために使用され、このタイプの関数はVariadic関数と呼ばれます。 「...」(3つのドット)の使用例を見てみましょう。

例1:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

echo calculateNumbers(10, 20, 30, 40, 50);

//Output 150
?>

calculateNumbers()関数の各引数は、 "…"を使用するときに$ paramsを配列として渡します。

"…"演算子を使用するには多くの異なる方法があります。以下にいくつかの例を示します。

例2:

<?php
function calculateNumbers($no1, $no2, $no3, $no4, $no5){
    $total = $no1 + $no2 + $no3 + $no4 + $no5;
    return $total;
}

$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers(...$numbers);

//Output 150
?>

例3:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}
$no1 = 70;
$numbers = array(10, 20, 30, 40, 50);
echo calculateNumbers($no1, ...$numbers);

//Output 220
?>

例4:

<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

$numbers1 = array(10, 20, 30, 40, 50);
$numbers2 = array(100, 200, 300, 400, 500);
echo calculateNumbers(...$numbers1, ...$numbers2);

//Output 1650

?>

?-> NullSafeオペレーター

現時点では、これは単なる提案であり、 ここで見つけることができます。これはNullSafe Operator 、関数を呼び出したり、 nullから値を取得しようとした場合にnullを返しnull ...例

$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; //return null
$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object

NullSafeオペレーター "?->"(おそらく)php8以降

現時点では、これは単なる提案ですリンクの説明をここ入力してください?->これはNullSafe Operator ?->関数を呼び出したり、 nullから値を取得しようとした場合にnullを返しnull ...

例:

<?php
$obj = null;
$obj = $obj?->attr; //return null
$obj = ?->funct(); // return null
$obj = $objDrive->attr; // Error: Trying to get property 'attr' of non-object
?>

Related