質問

これは何ですか?

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

どうしてこれなの?

以前は、オペレーターやその他の構文トークンに関する質問を見つけるのが難しいものでした。
主なアイデアは、Stack Overflowに関する既存の質問へのリンクを持つことです。そのため、PHPマニュアルからコンテンツをコピーするのではなく、それらを参照するのが簡単です。

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

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

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

リスト

あなたの特定のトークンが以下にリストされていない場合、あなたはそれをで見つけるかもしれません パーサートークンのリスト.


& ビットワイズ演算子 また 参照


=& 参照


&= ビットワイズ演算子


&& 論理演算子


% 算術演算子


!! 論理演算子


@ エラー制御演算子


?: 三元演算子


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


?string ?int ?array ?bool ?float Nullable Return Type宣言 (PHP 7.1以降)


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


:: スコープ解像度オペレーター


\ 名前空間


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


=> 配列


^ ビットワイズ演算子


>> ビットワイズ演算子


<< ビットワイズ演算子


<<< HeredocまたはNowdoc


= 割り当てオペレーター


== 比較演算子


=== 比較演算子


!== 比較演算子


!= 比較演算子


<> 比較演算子


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


| ビットワイズ演算子


|| 論理演算子


~ ビットワイズ演算子


+ 算術演算子, アレイオペレーター


+=-= 割り当てオペレーター


++-- オペレーターの増加/減少


.= 割り当てオペレーター


. 文字列演算子


, 関数引数

, 可変宣言


$$ 変数変数


` 実行オペレーター


<?= 短いオープンタグ


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


<? タグを開閉します


... 引数の開梱 (PHP 5.6以降)


** 指数 (PHP 5.6以降)


# ワンラインシェルスタイルのコメント


:? Nullable Returnタイプ


役に立ちましたか?

解決

オペレーターの増加 /減少

++ 増分演算子

-- 減少演算子

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--, 、最初に、現在のリンゴの数を表示し、 それから あなたはそこからそれを差し引きたいです。

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

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

一度 z が達成された aa 次は次です。

文字変数は増分することはできますが、減少することはできず、平凡なASCII文字(AZとAZ)のみがサポートされていることに注意してください。


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

他のヒント

ビットワイズ演算子

少しですか?少しは1または0の表現です。基本的には(0)と(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バイト)

より良い理解のためのいくつかの例

「と」オペレーター: &

$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() 働き。

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"

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

PHP 7に追加されました

宇宙船オペレーター <=> PHP 7に追加された最新の比較演算子は 非共同 平等演算子と同じ優先順位を持つバイナリ演算子(==, !=, ===, !==)。この演算子は、左手と右手のオペランドをより簡単に3方向の比較を可能にします。

演算子は、次の整数表現をもたらします。

  • 0 両方のオペランドが等しい場合
  • 未満 0 左手のオペランドが右手のオペランドよりも少ないとき
  • より大きい 0 左手のオペランドが右手のオペランドより大きいとき

例えば

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

この演算子を使用することの適切な実用的なアプリケーションは、2つの値の3方向の比較に基づいて、ゼロ、ネガティブ、またはポジティブ整数を返すと予想される比較のコールバックです。に渡された比較関数 usort そのような例の1つです。

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;
});

魔法の定数: :これらは単なるシンボルではなく、このトークンファミリーの重要な部分です。使用する場所に応じて変化する8つの魔法の定数があります。

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

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

__DIR__: :ファイルのディレクトリ。 includeを含む内で使用すると、含まれているファイルのディレクトリが返されます。これはに相当します 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変数が特定のクラスのインスタンス化されたオブジェクトであるかどうかを判断するために使用されます。

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

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

bool(true)
bool(false)

理由: 上記の例 $a のオブジェクトです mclass したがって、aのみを使用します 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のオペレーター:


論理演算子:

  • $ a && $ b: $ aと$ bの両方がtrueの場合はtrue。
  • $ a || $ B: $ aまたは$ bがtrueの場合はtrue。
  • $ a xor $ b: TRUE $ Aまたは$ BがTRUEであるが、両方ではない場合はTRUEです。
  • ! $ A: $ aが真でない場合は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 :true $ aが厳密に$ b未満の場合。
  • $ a> $ b :true $ aが厳密に$ bより大きい場合。
  • $ a <= $ b :true $ aが$ b以下の場合。
  • $ a> = $ b :true $ aが$ b以上の場合。
  • $ a <=> $ b :$ aがそれぞれ$より少ない、等しい、または$ bよりも少ない場合、ゼロよりも少ない、または大きい整数。 PHP 7の時点で利用可能。
  • $ a? $ B:$ c :$ a return $ bの場合、$ ellsは$ cを返します(三元演算子)
  • $ a ?? $ c :$ aと同じ? $ a:$ c(NULL COALESCINGオペレーター -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'thパワーに引き上げた結果(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 :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の値は$ 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などの言語から知られるように振る舞います。

宇宙船オペレーター <=> (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

null coulescingオペレーター(??)

このオペレーターは、成分演算子を使用して使用する必要があるという一般的なケースのために、PHP 7.0に追加されました。 isset(). 。それが存在し、そうでない場合、それは最初のオペランドを返します 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文字列は、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

質問:

何をしますか => 平均?


答え:

=> 私たち人間が分離するために使用することを決めたシンボルですか "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] アレイはaです ご挨拶, 、およびインデックス [2] アレイのシンプルです 整数値. 。私たちが持っている代替手段は、と呼ばれるものを使用することです 連想配列. 。連想配列には、aからいくつかの違いがあります シーケンシャル配列 (以前のケースは、次の値ごとに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 配列のペア その間 配列内の値の開始。

質問:

ここ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) -trueに評価します

  2. if ($a == '5') - この値を内部的に整数に変換し、両方の値を整数に変換し、両方の値を比較してから両方の値を比較すると、Trueに評価します。

  3. if ($a === 5) -trueに評価します

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

Null CoalesceオペレーターPHP

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

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

Null Coalesceオペレーター「??」 (PHP 7に追加)

オペレーターにとって最もキャッチングの名前ではありませんが、PHP 7はかなり便利なNull Coalesceをもたらしますので、例を共有すると思いました。

PHP 5には、値をテストする3成分演算子が既にあり、それが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にアップグレードするとすぐに使用することを知っているものです。

Nullable Return Type宣言

PHP 7は、返品型宣言のサポートを追加します。引数タイプ宣言と同様に、返品タイプ宣言は、関数から返される値のタイプを指定します。引数型宣言に利用できるように、同じタイプが返品タイプの宣言に利用可能です。

厳密なタイピングは、返品型宣言にも影響を及ぼします。デフォルトの弱いモードでは、そのタイプがまだない場合、返された値は正しいタイプに強制されます。強いモードでは、返された値は正しいタイプでなければなりません。そうしないと、TypeRrorがスローされます。

PHP 7.1.0の時点で、[型]名を疑問符(?)でプレフィックスすることにより、戻り値はnulableとマークできます。これは、関数が指定されたタイプまたはnullのいずれかを返すことを意味します。

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

ソース

スプラットオペレーターとしての3つのドット(...) (PHP 5.6以降)

PHPにはオペレーター「...」(3つのドット)があり、SPLATオペレーターと呼ばれます。これは、関数内の任意の数のパラメーターを渡すために使用され、このタイプの関数は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

?>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top