參考 - 這個符號在PHP中的含義是什麼?


Answers

位運算符

有點什麼? 一位表示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位。

第二個例子

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

兩個共享位是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。

Question

這是什麼?

這是一個關於PHP中語法問題的集合。 這也是一個社區Wiki,所以每個人都被邀請參與維護這個列表。

為什麼是這樣?

過去很難找到關於運算符和其他語法令牌的問題
主要想法是鏈接到堆棧溢出的現有問題,所以我們更容易引用它們,而不是複制PHP手冊中的內容。

¹注意:自2013年1月以來, 確實支持特殊字符 。 只需通過引號括住搜索詞,例如[php] "==" vs "==="

我應該在這裡做什麼?

如果您因為您提出過這樣的問題而被某人指向此處,請查找下面的特定語法。 鏈接到PHP手冊的頁面以及鏈接的問題可能會回答你的問題。 如果是這樣,你會被鼓勵上調答案。 該列表並不意味著替代他人提供的幫助。

列表

如果您的特定標記未在下面列出,您可能會在解析器標記列表中找到它。

& 位運算符References

=& References

&= 按位運算符

&& 邏輯運算符

% 算術運算符

!! 邏輯運算符

@ 錯誤控制操作員

?: 三元運算符

?? 空合併運算符 (自PHP 7起)

: 控制結構的替代語法三元運算符

:: 範圍分辨率運算符

\ Namespaces

-> 類和對象

=> Arrays

^ 按位運算符

>> 按位運算符

<< 按位運算符”

<<< Heredoc或Nowdoc

= 賦值運算符

== 比較運算符

===

!== 比較運算符

!= 比較運算符

比較運算符

<=> (自PHP 7.0起)

  • 太空船(三方比較)操作員

| 按位運算符

|| 邏輯運算符

~ 位運算符

+ 算術運算符數組運算符

+=-= 賦值運算符

++-- 遞增/遞減運算符

.= 賦值運算符

. 字符串運算符

, 函數參數

, 變量聲明

$$ 變量變量

` 執行操作員

<?= 短打開標籤

[] Arrays (PHP 5.4以來的簡短語法)

<? 打開和關閉標籤

... 參數解包 (自PHP 5.6開始)

** Exponentiation (自PHP 5.6起)

# 單行shell風格的評論







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中添加的最新比較操作符。它是一個與關聯運算符( ==!====!== )具有相同優先級的非關聯二元運算符。 該操作符允許在左側和右側操作數之間進行更簡單的三向比較。

運算符產生以下整數表達式:

  • 當兩個操作數相等時為0
  • 當左側操作數小於右側操作數時小於0
  • 當左側操作數大於右側操作數時大於0

例如

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

使用這個運算符的一個很好的實際應用是比較類型的回調,根據兩個值之間的三向比較,預計返回零,負或正整數。 傳遞給usort的比較函數就是這樣一個例子。

在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 5中,我們已經有了一個三元運算符,它測試一個值,然後返回第二個元素(如果返回true),第三個元素返回true,否則返回第三個元素:

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

還有一個簡寫,它允許你跳過第二個元素,如果它與第一個元素相同:echo $ count?:10; //也輸出10

在PHP 7中,我們還獲得了?? operator which rather than indicating extreme confusion which is how I would usually use two question marks together instead allows us to chain together a string of values. Reading from left to right, the first value which exists and is not null is the value that will be returned.

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

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

This construct is useful for giving priority to one or more values coming perhaps from user input or existing configuration, and safely falling back on a given default if that configuration is missing. It's kind of a small feature but it's one that I know I'll be using as soon as my applications upgrade to PHP 7.







空合併運算符(??)

這個操作符已經在PHP 7.0中添加了,它需要將三元運算符與isset()一起使用。 它返回它的第一個操作數,如果它存在並且不是NULL ; 否則返回第二個操作數。

<?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運算符的概述:

邏輯運算符:

  • $ a && $ b:如果$ a和$ b都為TRUE,則為TRUE。
  • $ a || $ b:如果$ a或$ b為真,則為TRUE。
  • $ a xor $ b:如果$ a或$ b為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 else返回$ 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_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相同

注意

and運算符和or運算符的優先級低於賦值運算符=

這意味著$a = true and false; 相當於($a = true) and false

在大多數情況下,您可能會想要使用&&|| 其行為可以從C,Java或JavaScript等語言中獲知。




問題

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

所以上面的是比特運算符和比特的比賽。

其中一個有用的例子就是像下面給出的簡單配置,所以單個整數字段可以為您存儲數千個連擊。

大多數人已經閱讀過文檔,但沒有真正了解這些按位運算符的真實世界用例。

例子你會愛上

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



Related