ข้อมูลอ้างอิง - สัญลักษณ์นี้มีความหมายอะไรใน PHP?


4477

นี่คืออะไร?

นี่คือชุดของคำถามที่เกิดขึ้นทุก ๆ ครั้งเกี่ยวกับไวยากรณ์ใน PHP นี่เป็น Wiki ชุมชนด้วยดังนั้นทุกคนจึงได้รับเชิญให้เข้าร่วมในการดูแลรายการนี้

ทำไมนี้

เคยยากที่จะค้นหาคำถามเกี่ยวกับตัวดำเนินการและโทเค็นไวยากรณ์อื่น ๆ
แนวคิดหลักคือการมีลิงก์ไปยังคำถามที่มีอยู่ใน Stack Overflow ดังนั้นเราจึงสามารถอ้างอิงได้ง่ายกว่าไม่ใช่คัดลอกเนื้อหาจากคู่มือ PHP

หมายเหตุ: ตั้งแต่เดือนมกราคม 2013, Stack มากเกินไม่สนับสนุนอักขระพิเศษ เพียงล้อมรอบคำค้นหาด้วยเครื่องหมายคำพูดเช่น[php] "==" vs "==="

ฉันควรทำอะไรที่นี่

หากคุณมีคนชี้ไปที่นี่เพราะคุณได้ถามคำถามดังกล่าวโปรดหาไวยากรณ์เฉพาะด้านล่าง หน้าที่เชื่อมโยงไปยังคู่มือ PHPพร้อมกับคำถามที่เชื่อมโยงจะตอบคำถามของคุณแล้ว ถ้าเป็นเช่นนั้นคุณได้รับการสนับสนุนให้โหวตคำตอบ รายการนี้ไม่ได้มีไว้สำหรับใช้แทนความช่วยเหลือของผู้อื่น

รายการ

ถ้าโทเค็นของคุณโดยเฉพาะไม่ได้ระบุไว้ด้านล่างนี้คุณอาจพบว่าในรายการของตัวแยกวิเคราะห์สัญญาณ


& ผู้ประกอบการหรือการอ้างอิงBitwise


=& อ้างอิง


&= ผู้ประกอบการระดับบิต


&& ผู้ประกอบการเชิงตรรกะ


% ตัวดำเนินการทางคณิตศาสตร์


!! ผู้ประกอบการเชิงตรรกะ


@ ผู้ควบคุมข้อผิดพลาด


?: ผู้ประกอบการที่สาม


?? ผู้ประกอบการ Null Coalesce (ตั้งแต่ PHP 7)


?string ?int ?array ?bool ?float ประกาศผลตอบแทนประเภทเป็นโมฆะ (ตั้งแต่ PHP 7.1)


: ไวยากรณ์ทางเลือกสำหรับโครงสร้างการควบคุม , Ternary ผู้ประกอบการ


:: ขอบเขตความละเอียดผู้ประกอบการ


\ namespaces


-> ชั้นเรียนและวัตถุ


=> อาร์เรย์


^ ผู้ประกอบการระดับบิต


>> ผู้ประกอบการระดับบิต


<< ผู้ประกอบการระดับบิต


<<< Heredoc หรือ Nowdoc


= ผู้ประกอบการที่ได้รับมอบหมาย


== ผู้ประกอบการเปรียบเทียบ


=== ผู้ประกอบการเปรียบเทียบ


!== ผู้ประกอบการเปรียบเทียบ


!= ผู้ประกอบการเปรียบเทียบ


<> ผู้ประกอบการเปรียบเทียบ


<=> ผู้ประกอบการเปรียบเทียบ (ตั้งแต่ PHP 7.0)


| ผู้ประกอบการระดับบิต


|| ผู้ประกอบการเชิงตรรกะ


~ ผู้ประกอบการระดับบิต


+ ดำเนินการทางคณิตศาสตร์ , ผู้ประกอบการอาร์เรย์


+=และ-= ผู้ประกอบการที่ได้รับมอบหมาย


++และการ-- เพิ่ม / ลดผู้ประกอบการ


.= ผู้ประกอบการที่ได้รับมอบหมาย


. ผู้ประกอบการสตริง


, อาร์กิวเมนต์ของฟังก์ชัน

, การประกาศตัวแปร


$$ ตัวแปรตัวแปร


` ผู้ดำเนินการ


<?= แท็กเปิดสั้น


[] อาร์เรย์ (ไวยากรณ์สั้นตั้งแต่ PHP 5.4)


<? การเปิดและปิดแท็ก


... การเปิดกล่องบรรจุอาร์กิวเมนต์ (ตั้งแต่ PHP 5.6)


** การยกกำลัง (ตั้งแต่ PHP 5.6)


# ความคิดเห็นสไตล์เชลล์แบบหนึ่งบรรทัด


:? ชนิดส่งคืนที่ Nullable


?-> การโทรของผู้ดำเนินการ NullSafe



36
ฉันรู้ว่านี้ไม่ได้เป็นอย่างเคร่งครัด PHP แต่สิ่งที่เกี่ยวกับรวมถึงการเชื่อมโยงไปยังphpdoc.orgสำหรับ phpDocumentor คิดเห็นไวยากรณ์ซึ่งเป็นที่นิยมใช้และก็ยังไม่สามารถที่จะค้นหา/**?
ไมค์

8
ฉันขอแนะนำฉากยึดเหลี่ยมและฉากโค้งงอได้หรือไม่?
ajreal

124
ฉันพบปัญหานี้มากมายเช่นกัน (ไม่สามารถค้นหาอักขระพิเศษ) ซึ่งเป็นสาเหตุที่ฉันสร้างSymbolHoundเครื่องมือค้นหาที่ไม่สนใจอักขระพิเศษ ฉันยังโพสต์ไว้บนStackApps
dncrane

1
จากหัวข้อทำไมนี่คืออะไร ฉันเดาว่าเพราะ "แนวคิดหลักคือมีลิงก์ไปยังคำถามที่มีอยู่ใน Stack Overflow ดังนั้นเราจึงสามารถอ้างอิงได้ง่ายกว่า"
เฮอร์เบิร์ต

3
คำถามถูกถามในวันนี้ (พ.ย. 20/15) stackoverflow.com/questions/33833259/what-is-rscat-in-phpถามว่า"$ rsCat ใน php คืออะไร" (หากคำถามนั้นยังคงปรากฏอยู่และไม่ถูกลบ) . แปลกพอไม่มีการอ้างอิงเกี่ยวกับ$ตัวแปร แต่เกี่ยวกับ$$ตัวแปรตัวแปรเท่านั้น ฉันเชื่อว่าควรแก้ไขบางแห่ง
Funk Forty Niner

คำตอบ:


1171

ผู้ประกอบการเพิ่ม / ลดลง

++ ผู้ประกอบการที่เพิ่มขึ้น

-- ผู้ประกอบการลดลง

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

เมื่อzถึงaaคือถัดไปและอื่น ๆ

โปรดทราบว่าสามารถเพิ่มตัวแปรอักขระได้ แต่ไม่ลดลงและรองรับเฉพาะอักขระ ASCII ธรรมดา (az และ AZ) เท่านั้น


กองโพสต์ล้น:


9
+1 สำหรับบันทึกย่อที่ตัวลดลงไม่ทำงานกับอักขระเฉพาะกับตัวเลข
Mark Baker

163
เพื่อประโยชน์ของทุกคนโปรดลบข้อมูลที่เป็นตัวหนาเกี่ยวกับการเพิ่มขึ้นก่อนที่จะเร็วขึ้นอย่างไม่สิ้นสุด นี่เป็นตัวอย่างที่แย่ที่สุดของการเพิ่มประสิทธิภาพก่อนวัยอันควรและข้อมูลประเภทนี้ไม่ควรอยู่ในหัวของผู้คนหากพวกเขาเพิ่งเริ่มเรียนรู้ PHP
Lotus Notes

14
@Lotus - ฉันคิดว่ามันเป็นเรื่องสนุก หากคุณเป็นมือใหม่สำหรับ PHP หรือ C ++ ฯลฯ ดูเหมือนว่าแปลกประหลาดที่ ++ i และ i ++ แตกต่างกันพอที่จะทำงานด้วยความเร็วที่แตกต่างกัน ฉันพบว่ามันน่าหลงใหล
Peter Ajtai

12
@Peter Ajtai ใช่มันน่าสนใจ แต่จากวิธีที่คุณจัดโครงสร้างโพสต์ของคุณคุณทำให้มันดูเหมือนข้อเท็จจริงสำคัญอย่างหนึ่งของ PHP ที่มีความสำคัญอย่างยิ่งต่อการใช้ภาษา
Lotus Notes

4
ไม่แน่ใจว่ามันเป็นเพียงฉันหรือไม่ แต่ตัวอย่างแอปเปิ้ลดูเหมือนจะทำให้เข้าใจผิดเล็กน้อย 'ฉันมีแอปเปิ้ล 10 อัน ฉันแค่กินมันทำให้ฉันเชื่อว่าคุณมีแอปเปิ้ล 11 อัน แต่ตอนนี้คุณมี 10 อันเพราะคุณกินแค่แอปเปิ้ลมากกว่าที่คุณกินหนึ่งหลังจากที่คุณมี 10 แล้วทำให้คุณมี 9 - นั่นคือสิ่งที่รหัสหมายถึง
さりげない告白

440

ผู้ประกอบการระดับบิต

อะไรนะ? บิตเป็นการแทนค่า 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

ตัวดำเนินการ "หรือ": |

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

คุณจะสังเกตเห็นว่าเรามีชุด 3 บิตในคอลัมน์ 8, 2 และ 1 เพิ่มที่ขึ้น: 8 + 2 + 1 = 11


6
จะเกิดอะไรขึ้นถ้า $ a มีค่ามากกว่า 255
Aycan Yaşıt

@ AycanYaşıtระบบปฏิบัติการส่วนใหญ่ใช้ระบบ 32 บิตและ 64 บิตนั่นหมายความว่าขีด จำกัด มากกว่า 255 (8 บิต)
AlbertSamuel

@ AycanYaşıtอันที่จริงการแสดงที่นี่ด้วยความยาวหนึ่งไบต์นั้นไม่ถูกต้องเนื่องจากแม้แต่จำนวนเต็มที่น้อยที่สุดก็ยังคงเป็น 64 บิต (8 ไบต์) ในหน่วยความจำบนแพลตฟอร์ม 64 บิตที่ทันสมัย
Kaii

ทำไมand &เป็น 0 0 0 0 1 0 0 0 และor |เป็น 0 0 0 0 1 0 1 1?
Vir

285

<=> ผู้ประกอบการยานอวกาศ

เพิ่มใน 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;
});

21
ไม่แน่ใจว่า$a <=> $bจะแตกต่างกันไป$a - $b
รอบ

38
@AcidShout ใช้$a - $bงานได้กับตัวเลข แต่ไม่ใช่สตริงวัตถุหรืออาร์เรย์
mcrumley

44
@ McCrumley ไม่มันแย่ไปกว่านั้น โดยทั่วไป$a - $bไม่ได้ผลกับตัวเลข มันทำงานเฉพาะสำหรับจำนวนเต็ม มันไม่ทำงานสำหรับตัวเลขที่ไม่ใช่จำนวนเต็มเนื่องจากปลดusortค่าส่งคืนของฟังก์ชันตัวเปรียบเทียบของคุณไปintซึ่งหมายความว่า 0.5 ได้รับการโยนเป็น 0 ซึ่งหมายความว่าตัวเลขสองตัวที่มีความแตกต่างน้อยกว่า 1 เช่น 4 และ 4.6 อาจขึ้นอยู่กับ สิ่งใดที่ถูกส่งผ่านเป็นอาร์กิวเมนต์แรกของฟังก์ชันเปรียบเทียบของคุณ) เปรียบเทียบอย่างไม่ถูกต้องเท่ากัน
Mark Amery

5
@MarkAmery คู่มือการโยกย้ายไม่ใช่ลักษณะการทำงานของผู้ประกอบการ สำหรับสิ่งที่คุณต้องการดูที่ส่วนของตัวดำเนินการทางภาษาของคู่มือสำหรับphp.net/language.operators.comการตัดสินพฤติกรรมที่แท้จริงของสิ่งนี้ขึ้นอยู่กับฟังก์ชั่นการเปรียบเทียบต่างๆของ API เช่นเมื่อคุณใช้ strcmp สำหรับสตริง คุณไม่สามารถรับประกันค่าส่งคืนจริงในทุกกรณี แน่นอนว่ามันเกือบทุกครั้งที่ 1, 0 หรือ -1 แต่สำหรับกรณีที่คุณไม่สามารถรับประกันได้ว่ามันเหมือนกับการตัด strcmp ของ libc คุณเสนอพฤติกรรมที่กำหนดเช่นเดียวกับข้อมูลจำเพาะพื้นฐานที่ปลอดภัย
Sherif

9
@MarkAmery จุดที่นี่ไม่อนุญาตให้คนพึ่งพาพฤติกรรมที่ไม่ได้กำหนด สำหรับกรณีที่บางคนได้รับค่าที่ไม่ตรงกับ 1, 0, หรือ -1 คุณจะได้รับคนยื่นรายงานข้อผิดพลาดโดยคิดว่ามีบางอย่างผิดปกติในภาษา ซึ่งเป็นเหตุผลที่เราเอกสารทั้งหมดที่เราสามารถรับประกันคุ้มค่าที่จะเป็นน้อยกว่า , มากกว่าหรือเท่ากับ 0 และไม่จำเป็นต้อง 1, 0 และ -1
Sherif


273
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"

239

ค่าคงที่เวทมนตร์ : แม้ว่าสิ่งเหล่านี้ไม่ได้เป็นเพียงสัญลักษณ์ แต่เป็นส่วนสำคัญของตระกูลโทเค็นนี้ ค่าคงที่เวทมนต์แปดค่าที่เปลี่ยนแปลงขึ้นอยู่กับตำแหน่งที่ใช้

__LINE__: หมายเลขบรรทัดปัจจุบันของไฟล์

__FILE__: เส้นทางแบบเต็มและชื่อไฟล์ของไฟล์ หากใช้ภายในการรวมชื่อของไฟล์ที่รวมจะถูกส่งกลับ ตั้งแต่ PHP 4.0.2 __FILE__จะมีเส้นทางที่สมบูรณ์พร้อม symlink ที่ได้รับการแก้ไขในขณะที่รุ่นเก่านั้นจะมีเส้นทางที่สัมพันธ์กันในบางสถานการณ์

__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__ทำงานในลักษณะเดียวกันด้วย เมื่อใช้ในเมธอด trait __CLASS__เป็นชื่อของคลาสที่ trait ถูกใช้

__TRAIT__: ชื่อลักษณะ (เพิ่มใน PHP 5.4.0) ตั้งแต่ PHP 5.4 ค่าคงที่นี้จะคืนค่าคุณลักษณะตามที่ได้รับการประกาศ ชื่อลักษณะประกอบด้วยเนมสเปซที่มีการประกาศใน (เช่นFoo\Bar)

__METHOD__: ชื่อวิธีการเรียน (เพิ่มใน PHP 5.0.0) ชื่อเมธอดจะถูกส่งคืนตามที่ได้รับการประกาศ

__NAMESPACE__: ชื่อของเนมสเปซปัจจุบัน (คำนึงถึงขนาดตัวพิมพ์) ค่าคงนี้ถูกกำหนดในเวลาคอมไพล์ (เพิ่มใน PHP 5.3.0)

แหล่ง


150

ผู้ประกอบการประเภท

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ใช้เพียง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)

ตัวอย่างด้วย Clone

<?php 
class cloneable { } 
$a = new cloneable;
$b = clone $a; 
var_dump($a instanceof cloneable); 
var_dump($b instanceof cloneable);

ตัวอย่างด้านบนจะแสดงผล:

bool(true)
bool(true)

7
ข้างต้นทำงานร่วมกับ 'อินเทอร์เฟซ' เช่นกัน สิ่งนี้มีประโยชน์สำหรับการตรวจสอบว่ามีอินเตอร์เฟสเฉพาะ
Ryan Vincent

133

ภาพรวมของตัวดำเนินการใน PHP :


ผู้ประกอบการตรรกะ:

  • $ a && $ b: TRUE หากทั้ง $ a และ $ b เป็น TRUE
  • $ a || $ b: TRUE หากทั้ง $ a หรือ $ b เป็น TRUE
  • $ a xor $ b: TRUE หากทั้ง $ a หรือ $ b เป็น TRUE แต่ไม่ใช่ทั้งคู่
  • ! $ a: TRUE หาก $ a ไม่ใช่ TRUE
  • $ a และ $ b: TRUE หากทั้ง $ a และ $ b เป็น TRUE
  • $ a หรือ $ b: TRUE ถ้า $ 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: 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 : จำนวนเต็มน้อยกว่าเท่ากับหรือมากกว่าศูนย์เมื่อ $ a ตามลำดับน้อยกว่าเท่ากับหรือมากกว่า $ b มีให้ตั้งแต่ PHP 7
  • $ a? $ b: $ c : ถ้า $ a return $ 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 ต่อหนึ่งจากนั้นส่งคืน $ a
  • $ a ++ : ส่งคืน $ a จากนั้นเพิ่ม $ a ทีละหนึ่ง
  • - $ a : ลดลง $ a โดยหนึ่งแล้วส่งกลับ $ a
  • $ a-- : ส่งคืน $ a จากนั้นลดลง $ a ต่อหนึ่ง

ผู้ประกอบการระดับบิต

  • $ a & $ b : มีการตั้งค่าบิตทั้งใน $ a และ $ b
  • $ a | $ b : ตั้งค่าบิตเป็น $ a หรือ $ b
  • $ a ^ $ b : บิตที่ตั้งไว้ใน $ a หรือ $ b แต่ไม่ใช่ทั้งสองชุด
  • ~ $ a : ไม่ได้ตั้งค่าบิตที่ตั้งไว้ใน $ a และในทางกลับกัน
  • $ a << $ b : เลื่อนบิตของ $ a $ b ก้าวไปทางซ้าย (แต่ละขั้นตอนหมายถึง "คูณสอง")
  • $ a >> $ b : เลื่อนบิตของ $ 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

ผู้ประกอบการที่ได้รับมอบหมาย:

  • $ 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 $ ข
  • $ a & = $ b : เหมือนกับ $ a = $ a & $ b
  • $ a | = $ b : เหมือนกับ $ a = $ a | $ ข
  • $ 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


1
มีข้อผิดพลาดใน$a ?? $cข้อความระบุว่าเหมือนกัน$a ? $a : $cแต่ตัวดำเนินการ ternary ตรวจสอบว่าค่าเป็นจริงในทางกลับกันการรวมค่า null จะตรวจสอบค่าว่างดังนั้นถ้า $ a เป็น 0 คุณจะได้รับ 0 (เพราะ 0 คือ ไม่ใช่ null) ตัวอย่างเช่นถ้าคุณมี: $a=0; $c=5;แล้ว$a?$a:$cส่งคืน 5 และ$a??$cส่งคืน 0
stramin

104

ผู้ประกอบการยานอวกาศ<=> (เพิ่มใน PHP 7)

ตัวอย่างสำหรับ<=>โอเปอเรเตอร์ยานอวกาศ (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
// 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

1
ตรวจสอบphp.net/manual/en/language.operators.comparison.phpสำหรับการอ้างอิง
rajangupta

74

{} วงเล็บปีกกา

และบางคำเกี่ยวกับโพสต์ล่าสุด

$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

4
เครื่องหมาย {''} สำหรับชื่อคุณสมบัติ echo $ ภาพยนตร์ -> ภาพยนตร์ -> {'great-lines'} -> line; สามารถใช้เพื่อเข้าถึงข้อมูลใน SimpleXMLElement อาจใช้ในกรณีอื่นด้วย php.net/manual/en/simplexml.examples-basic.php
Andrei

68

ตัวดำเนินการรวมศูนย์ Null (??)

ผู้ประกอบการนี้ได้รับการเพิ่มใน PHP 7.0 สำหรับกรณีทั่วไปของจำเป็นต้องใช้ประกอบ ternary 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';
?>

64

PHP สตริง: PHP Strings สามารถระบุได้สี่วิธีไม่ใช่แค่สองวิธี:

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

@ Rizier123: "Heredocs ไม่สามารถใช้สำหรับการเริ่มต้นคุณสมบัติคลาสได้ตั้งแต่ PHP 5.3 ข้อ จำกัด นี้มีผลเฉพาะ heredocs ที่มีตัวแปร"
PHPFan

48

คำถาม:

อะไร=>หมายถึง?


ตอบ:

=>เป็นสัญลักษณ์ที่มนุษย์เราตัดสินใจใช้เพื่อแยก"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]ของอาร์เรย์เป็นง่ายค่าจำนวนเต็ม ทางเลือกที่เราจะมีก็คือใช้สิ่งที่เรียกว่าอาเรย์ร่วม อาร์เรย์ Associative มีความแตกต่างเล็กน้อยจากSequential Array ( ซึ่งเป็นกรณีก่อนหน้านี้เนื่องจากเพิ่มดัชนีที่ใช้ในลำดับที่กำหนดไว้ล่วงหน้าโดยการเพิ่มขึ้น 1 สำหรับแต่ละค่าต่อไปนี้ )

ความแตกต่าง ( ระหว่างลำดับและอาเรย์แบบเชื่อมโยง ):

  • การประกาศ Array ที่เกี่ยวข้องเป็นประจำคุณไม่เพียงรวมvalueสิ่งที่คุณต้องการใส่ในอาร์เรย์ แต่คุณยังใส่ค่าดัชนี (เรียกว่าkey) ที่คุณต้องการใช้เมื่อเรียกอาเรย์ในส่วนต่อไปของ รหัส. "key" => "value"ไวยากรณ์ต่อไปนี้ถูกนำมาใช้ในช่วงนั้นประกาศ:

  • เมื่อใช้อาเรย์ที่คุ้มค่าก็จะวางอยู่ภายในดัชนีของอาร์เรย์เพื่อดึงที่ต้องการkeyvalue

ตัวอย่างเช่น

    $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

จุดสุดท้าย:

ดังนั้นจากตัวอย่างข้างต้นเป็นเรื่องง่ายที่จะเห็นว่า=>มีการใช้สัญลักษณ์เพื่อแสดงความสัมพันธ์ของ Associative Array ระหว่างแต่ละkeyและvalueคู่ในอาเรย์ระหว่างการเริ่มต้นของค่าภายในอาเรย์


36

คำถาม :

"&" หมายถึงอะไรที่นี่ใน 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

30

== ใช้สำหรับตรวจสอบความเท่าเทียมกันโดยไม่พิจารณาข้อมูลชนิดตัวแปร

===ใช้สำหรับตรวจสอบความเท่าเทียมกันสำหรับทั้งค่าตัวแปรและชนิดข้อมูล

ตัวอย่าง

$a = 5

  1. if ($a == 5) - จะประเมินเป็นจริง

  2. if ($a == '5') - จะประเมินเป็นจริงเพราะในขณะที่การเปรียบเทียบค่าทั้งสองนี้ PHP จะแปลงค่าสตริงนั้นเป็นจำนวนเต็มจากนั้นเปรียบเทียบทั้งสองค่า

  3. if ($a === 5) - จะประเมินเป็นจริง

  4. if ($a === '5') - จะประเมินผลเป็นเท็จเนื่องจากค่าเป็น 5 แต่ค่านี้ 5 ไม่ใช่จำนวนเต็ม


27

ตัวดำเนินการ Null Coalesce "??" (เพิ่มใน PHP 7)

ไม่ใช่ชื่อที่น่าจับตามองสำหรับโอเปอเรเตอร์ แต่ PHP 7 นำมารวมกันเป็นประโยชน์ค่อนข้างว่างดังนั้นฉันคิดว่าฉันจะแบ่งปันตัวอย่าง

ใน PHP 5 เรามีผู้ประกอบการที่สามซึ่งทดสอบค่าแล้วส่งคืนองค์ประกอบที่สองหากสิ่งนั้นคืนค่าจริงและอันดับสามหากไม่มี:

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


12

การประกาศชนิดส่งคืนที่ Nullable

PHP 7 เพิ่มการสนับสนุนสำหรับการประกาศผลตอบแทนประเภท เช่นเดียวกับการประกาศประเภทอาร์กิวเมนต์การประกาศชนิดส่งคืนจะระบุประเภทของค่าที่จะถูกส่งคืนจากฟังก์ชัน ชนิดเดียวกันนี้มีให้สำหรับการประกาศชนิดส่งคืนตามที่มีให้สำหรับการประกาศประเภทอาร์กิวเมนต์

การพิมพ์ที่เข้มงวดยังมีผลต่อการประกาศชนิดส่งคืน ในโหมดค่าเริ่มต้นอ่อนค่าที่ส่งคืนจะถูก coerced กับชนิดที่ถูกต้องถ้าพวกเขาไม่ได้อยู่ในประเภทนั้น ในโหมดรัดกุมค่าที่ส่งคืนจะต้องเป็นชนิดที่ถูกต้องมิฉะนั้น TypeError จะถูกโยนทิ้ง

ในฐานะของ PHP 7.1.0 ค่าส่งคืนสามารถทำเครื่องหมายเป็นโมฆะได้โดยนำหน้าชื่อประเภทด้วยเครื่องหมายคำถาม (?) นี่หมายความว่าฟังก์ชันจะคืนค่าชนิดที่ระบุหรือค่า NULL

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

แหล่ง


7

สาม DOTS เป็น Splat Operator (... ) (ตั้งแต่ PHP 5.6)

PHP มีโอเปอเรเตอร์ "... " (สามจุด) ซึ่งเรียกว่า Splat Operator มันถูกใช้เพื่อส่งผ่านจำนวนพารามิเตอร์โดยพลการในฟังก์ชั่นและฟังก์ชั่นประเภทนี้เรียกว่าฟังก์ชั่น Variadic ลองยกตัวอย่างการใช้ "... " (สามจุด)

ตัวอย่างที่ 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
?>

แต่ละอาร์กิวเมนต์ของ calculNumbers () ฟังก์ชันส่งผ่าน $ 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

?>

0

? -> ตัวดำเนินการ NullSafe

สำหรับขณะนี้เป็นเพียงข้อเสนอที่คุณสามารถหาได้ที่นี่ มันคือNullSafe Operatorมันจะส่งคืน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

การเพิ่มความรู้สึกก่อนเวลาอันควรไม่มีใครจะเห็นโอเปอเรเตอร์นี้ในรหัสสดใด ๆ และอาจไม่สามารถเพิ่มได้ มันจะดีกว่าที่จะรอจนกว่าจะมีการสรุปรายละเอียดและจัดทำเอกสารอย่างถูกต้อง
IMSoP

เราได้รับคำถามแล้ว : / หากข้อเสนอล้มเหลวเราสามารถตัดสินใจได้ว่าสิ่งนี้คุ้มค่าหรือไม่
John Conde

@JohnConde เห็นไหม นี่คือสิ่งที่ฉันพูด ...
Berto99

@ JohnConde ฉันถูกล่อลวงให้ปิดพวกเขาเป็นนอกหัวข้อเพราะพวกเขาถามเกี่ยวกับภาษาการเขียนโปรแกรมในจินตนาการ หรือบางที "คำถามนี้อยู่ในส่วนอื่นของไทม์ไลน์โปรดตรวจสอบการตั้งค่าในไทม์แมชชีน";)
IMSoP

lol ความคิดนั้นทำให้ใจฉัน ฉันถามตัวเองว่าสิ่งนี้จะให้คุณค่าแก่ผู้เข้าชมในอนาคตหรือไม่และในตอนนี้คำตอบคือ "ใช่" แต่นั่นอาจเปลี่ยนแปลง ...
John Conde

0

NullSafe Operator "? ->" (อาจเป็นไปได้) ตั้งแต่ php8

สำหรับขณะนี้เป็นเพียงข้อเสนอที่คุณสามารถหาได้ป้อนคำอธิบายการเชื่อมโยงที่นี่ ?->มันคือNullSafe Operatorมันจะส่งคืน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
?>

การเพิ่มความรู้สึกก่อนเวลาอันควรไม่มีใครจะเห็นโอเปอเรเตอร์นี้ในรหัสสดใด ๆ และอาจไม่สามารถเพิ่มได้ มันจะดีกว่าที่จะรอจนกว่าจะมีการสรุปรายละเอียดและจัดทำเอกสารอย่างถูกต้อง
IMSoP

@IMSoP ฉันอยู่กับคุณ แต่ฉันได้รับเชิญให้ทำที่นี่stackoverflow.com/questions/62178354/… ...
Berto99

ดูเหมือนว่าตอนนี้เรามีคำตอบสองข้อเกี่ยวกับเรื่องนี้ โดยส่วนตัวแล้วฉันเพิ่งจะลงคะแนนให้ปิดคำถามอื่นแทนที่จะพยายามตอบเพราะตอนนี้ไม่มีผู้ดำเนินการดังกล่าว
IMSoP

@IMSoP มีคำถามมากมายที่นี่ใน StackOverflow เกี่ยวกับข้อเสนอ C ++ และพวกเขาจะไม่ถูกปิด: ถึงแม้ว่าฉันจะอยู่กับคุณเกี่ยวกับการไม่โพสต์ที่นี่ผู้ประกอบการในขณะนี้
Berto99

ผมไม่ทราบว่ามากเกี่ยวกับกระบวนการ C ++ และเมื่อมันมีเหตุผลที่จะหารือเกี่ยวกับข้อเสนอและเป็นธรรมนี้ดูเหมือนว่าค่อนข้างมีแนวโน้มที่จะประสบความสำเร็จในการปรับเปลี่ยนการออกกำลังกาย แต่โดยทั่วไปมีจำนวนมากของคุณสมบัติที่นำเสนอสำหรับ PHP ที่ไม่เคยทำให้มันไป ภาษาและมันจะค่อนข้างสับสนสำหรับผู้ใช้ที่จะเจอพวกเขาทั้งหมดในรายการอ้างอิง ที่กล่าวว่าฉันเป็นเพียงส่วนหนึ่งเป็นชายชราที่ไม่พอใจที่นี่: P
IMSoP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.