違い - php 変数 宣言




参考資料-このシンボルはPHPで何を意味していますか? (12)

これは何ですか?

これはPHPの文法について、今度は毎回出てくる質問の集まりです。 これはコミュニティWikiでもあり、誰もがこのリストの管理に参加するよう呼びかけられます。

どうしてこれなの?

これまでは、演算子やその他の構文トークンに関する質問を見つけるのが難しかったです.¹
主な考え方は、Stack Overflowに関する既存の質問へのリンクを持つことです。したがって、PHP Manualからコンテンツをコピーするのではなく、PHPを参照する方が簡単です。

¹注:2013年1月以降、Stack Overflow は特殊文字をサポートしています。 検索用語を引用符で囲むだけです(例: [php] "==" vs "==="

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

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

リスト

特定のトークンが以下にリストされていない場合は、「 パーサートークンのリスト 」に表示されます。

ビット演算子またはReferences

=& References

&= ビット演算子

&& 論理演算子

% 演算子

!! 論理演算子

@ エラー制御演算子

?: 三項演算子

?? Null Coalesce演算子 (PHP 7以降)

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

:: スコープ解決オペレータ

\ Namespaces

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

=> Arrays

^ ビット演算子

>> ビット演算子

<< ビット演算子

<<< HeredocまたはNowdoc

= 代入演算子

== 比較演算子

=== 比較演算子

!== 比較演算子

!= 比較演算子

<> 比較演算子

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

  • 宇宙船(三方比較)オペレータ

| ビット演算子

|| 論理演算子

~ ビット演算子

+ 算術演算子配列演算子

+=-= 代入演算子

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

.= 代入演算子

. 文字列演算子

, 関数の引数

, 可変宣言

$$ 変数

` 実行演算子

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

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

<? タグの開閉

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

** Exponentiation (PHP 5.6以降)

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


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、同じタイプの場合は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( 三項演算子
  • $ a ?? $ c$ aと同じですか? $ a:$ c( ヌル合体演算子 - 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 :$ 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と同じです。

注意

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

つまり、 $a = true and false; ($a = true) and falseと等価です。

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


<=>宇宙船オペレータ

PHP 7で追加されました

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

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

  • 両方のオペランドが等しい場合は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;
});

ビット演算子

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

バイトとは何ですか? 1バイトは8ビットで構成され、1バイトの最高値は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まで追加します。


型演算子

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)

理由:上の例$amclassオブジェクトですので、 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)

==可変データ型 考慮せずにチェック等価に使用される

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

$a = 5

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

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

  3. if ($a === 5) - 真と評価する

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



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

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

--減算演算子

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)だけがサポートされています。

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


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

ヌル結合演算子(??)

この演算子は、 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';
?>

マジック定数 :これらは単なる記号ではありませんが、このトークンファミリーの重要な部分です。 それらが使用される場所によって変わる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で追加されています)。

Source


質問:

=>とは何ですか?

回答:

=>人間のシンボルが、連想配列の"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ずつインクリメントします )。

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

  • 連想配列の宣言の間に、配列に格納する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ペアのそれぞれとの間の連想配列の関係を表すために、 =>記号が使用されていることがわかります。


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