php - 參考 - 這個符號在PHP中意味著什麼?




9 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++會有相同的結果。

預增量稍微快一點,因為它確實增加了變量,然後'返回'結果。 後增量創建一個特殊變量,在那裡複製第一個變量的值,並且只有在使用第一個變量之後,才用第二個變量替換它的值。

但是,您必須使用$apples-- ,因為首先,您要顯示當前的蘋果數, 然後您想從中減去一個蘋果。

您還可以在PHP中增加字母:

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

一旦達到zaa就是下一個,依此類推。

請注意,字符變量可以遞增但不遞減,即使只支持純ASCII字符(az和AZ)。

Stack Overflow帖子:

這是什麼?

這是一系列關於PHP語法的問題。 這也是社區Wiki,因此邀請每個人參與維護此列表。

為什麼是這樣?

過去很難找到關於運算符和其他語法標記的問題.¹
主要思想是鏈接到上的現有問題,因此我們更容易引用它們,而不是複制PHP手冊中的內容。

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

我該怎麼辦?

如果您因為提出這樣的問題而被某人指向此處,請在下面找到具體的語法。 PHP手冊的鏈接頁面以及鏈接的問題可能會回答您的問題。 如果是這樣,我們鼓勵您提出答案。 此列表並不代替其他人提供的幫助。

列表

如果您的特定令牌未在下面列出,則可以在“ 解析器令牌列表”中找到它。

& 按位運算符References

=& References

&= 按位運算符

&& 邏輯運算符

% 算術運算符

!! 邏輯運算符

@ 錯誤控制運算符

?: 三元運算符

?? Null Coalesce運算符 (自PHP 7起)

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

:: 範圍解析運算符

\ Namespaces

-> 類和對象

=> Arrays

^ 按位運算符

>> 按位運算符

<< 按位運算符

<<< Heredoc或Nowdoc

= 分配運營商

== 比較運算符

===

!== 比較運算符

!= 比較運算符

<> 比較運算符

<=> (自PHP 7.0起)

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

| 按位運算符

|| 邏輯運算符

~ 按位運算符

+ 算術運算符數組運算符

+=-= 賦值運算符

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

.= 分配運營商

. 字符串運算符

, 函數參數

, 變量聲明

$$ 變量變量

` 執行運營商

<?= 短開標籤

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

<? 打開和關閉標籤

... 參數解包 (自PHP 5.6起)

** Exponentiation (自PHP 5.6起)

# 單行shell風格的評論







魔術常數 :雖然這些不僅僅是符號,而是這個像徵家族的重要組成部分。 有八個魔法常數會根據它們的使用位置而改變。

__LINE__ :文件的當前行號。

__FILE__ :文件的完整路徑和文件名。 如果在include中使用,則返回包含文件的名稱。 自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__也適用於特徵。 在trait方法中使用時, __CLASS__是使用特徵的類的名稱。

__TRAIT__ :特徵名稱。 (在PHP 5.4.0中添加)從PHP 5.4開始,此常量返迴聲明的特徵(區分大小寫)。 特徵名稱包括聲明它的名稱空間(例如Foo\Bar )。

__METHOD__ :類方法名稱。 (在PHP 5.0.0中添加)方法名稱在聲明時返回(區分大小寫)。

__NAMESPACE__ :當前命名空間的名稱(區分大小寫)。 此常量在編譯時定義(在PHP 5.3.0中添加)。

Source




類型操作符

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)



宇宙飛船運營商<=> (在PHP 7中添加)

<=> Spaceship運算符的示例(PHP 7,來源:PHP手冊):

整數,浮點數,字符串,數組和對像用於變量的三向比較。

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

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



PHP字符串: PHP字符串可以通過四種方式指定,而不僅僅是兩種方式:

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



題:

=>是什麼意思?

回答:

=>我們人類決定使用的符號來分離關聯數組中的"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 )。

差異( 順序和關聯數組之間 ):

  • 繼承關聯數組的聲明,您不僅要包含要放入數組中的值,還要在後面的部分中調用數組時使用的索引值(稱為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對之間的關聯數組的關係。在數組內的值的啟動期間




Null Coalesce Operator php

對於需要與isset()一起使用三元數的常見情況,已將空合併運算符(??)添加到PHP7中。它返回第一個操作數(如果存在)並且不為NULL,否則返回其第二個操作數,如下例所示:

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



Null Coalesce運算符“??” (在PHP 7中添加)

不是運營商最糟糕的名字,但PHP 7帶來了相當方便的空合併,所以我想我會分享一個例子。

在PHP 5中,我們已經有一個三元運算符,它測試一個值,然後返回第二個元素,如果返回true,則返回第三個元素,如果不是:

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

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

在PHP 7中我們另外得到?? 運算符,而不是表示極端混亂,而不是我通常會一起使用兩個問號,而是允許我們將一串值鏈接在一起。從左到右讀取,存在且不為null的第一個值是將返回的值。

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

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

此構造對於為來自用戶輸入或現有配置的一個或多個值賦予優先級非常有用,並且如果缺少該配置,則安全地回退到給定的默認值。這是一個小功能,但我知道,只要我的應用程序升級到PHP 7,我就會使用它。




Related