ตัวดำเนินการ PHP“ ->” เรียกว่าอะไรและคุณจะพูดอย่างไรเมื่ออ่านโค้ดดัง ๆ [ปิด]


127

คุณเรียก->ตัวดำเนินการค้นหาลูกศรนี้ว่าอะไรที่พบใน PHP?

ซึ่งอาจเป็นเครื่องหมายลบเส้นประหรือยัติภังค์ตามด้วยเครื่องหมายมากกว่า (หรือเครื่องหมายบั้งขวา)

คุณออกเสียงอย่างไรเมื่ออ่านโค้ดดัง ๆ


12
เหตุใดคำถามนี้จึงถูกปิดเนื่องจากซ้ำกับคำถามที่เชื่อมโยงไปยังคำถามนี้เพื่อตอบคำถาม
เบ็น

1
ใน C ++ ตัวดำเนินการ "->" เรียกว่า "member of pointer" แต่ตัวดำเนินการ PHP "->" อยู่ใกล้กับ "มากกว่า" ตัวดำเนินการใน C ++ และที่เรียกว่า "สมาชิกของวัตถุ"
user34660

คำตอบ:


134

ชื่ออย่างเป็นทางการคือ "ผู้ประกอบการวัตถุ" - T_OBJECT_OPERATOR ฉันเรียกมันว่า "ลูกศร"


9
โปรดทราบว่าโทเค็นคำศัพท์ไม่ใช่สิ่งที่มักอ้างถึงโทเค็น ยกตัวอย่างเช่น :: ชื่อเป็น 'ผู้ประกอบการที่มีรายละเอียดขอบเขต' T_DOUBLE_COLONแต่ระบุไว้ในบทความว่า ฉันจะ +1 ให้คุณเมื่อฉันได้รับคะแนนโหวตมากขึ้น :)
Billy ONeal

1
ฟังดูแปลก ๆ ถ้าคุณอ่าน "และหลังจาก B ดำเนินการและคืนเงินเดือนลูกศร A" มันจะเหมือนกับว่า A อ้างถึง C.
เบ็น

66
สิทธิของ Billy คนส่วนใหญ่เรียก :: a T_PAAMAYIM_NEKUDOTAYIM ในการสนทนาแบบสบาย ๆ
Alan Storm

3
ฉันจะบอกว่ามัน$a->do()เป็น "วิธีการของ A" และ$a->thingเป็น "คุณสมบัติของ A" ดังนั้นมันจึงสัมพันธ์กัน
Martin Lyne

1
Btw T_PAAMAYIM_NEKUDOTAYIMแปลว่า "โคลอนสองเท่า" ในภาษาฮิบรู
Neta

59

ฉันเรียกมันว่า " โผ "; เช่นเดียวกับ$Foo->bar(): "Foo dart bar"

เนื่องจากหลายภาษาใช้ "dot" เช่นเดียวกับที่Foo.bar();ฉันต้องการให้ใช้คำพยางค์เดียว “ ลูกศร” ยืดเยื้อเกินไป! ;)

เนื่องจาก PHP ใช้."dot" ในการเชื่อมต่อ (เพราะเหตุใด) ฉันจึงไม่สามารถพูดว่า "dot" ได้อย่างปลอดภัย - อาจทำให้สับสนได้

เมื่อพูดคุยกับเพื่อนร่วมงานเราตัดสินใจเลือก "โผ" เป็นคำที่คล้ายกับ "dot" มากพอที่จะไหลได้อย่างสบาย ๆ แต่มีความชัดเจนเพียงพอ (อย่างน้อยก็เมื่อเราพูด) เพื่อไม่ให้เข้าใจผิดว่าเป็น "dot" ที่เชื่อมต่อกัน .


1
ฉันชอบมัน! +1 สำหรับคุณ ฉันคิดว่ามีอันตรายจากการ "โผ" เป็น "จุด" เมื่อพูดออกมาดัง ๆ น่าเสียดายที่ "ลูกศร" น่าจะแน่นกว่านี้มาก
Phil Perry

ดีนี่คือคำตอบที่ฉันมักจะใช้ในหัว เหตุผลที่ดีสำหรับคำตอบของคุณ
Liam

ฉันจะจำสิ่งนี้ได้อย่างแน่นอน
Chev

ฉันเข้าใจถ้าคุณพูดว่าลูกศร ... ฉันจะหลงทางอย่างสิ้นเชิงถ้าคุณพูดถึงโผ
Emeka Mbah

39

เมื่ออ่านออกเสียงโค้ด PHP ฉันจะไม่ออกเสียงโอเปอเรเตอร์ "->" สำหรับ$db->prepare($query);ฉันส่วนใหญ่จะพูดว่า "Db [short pause]เตรียมคำค้นหา" ดังนั้นฉันเดาว่าฉันพูดเหมือนลูกน้ำในประโยคปกติ

เช่นเดียวกันกับ Paamayim Nekudotayim ("::")


10
Paamayah whata? jk
ValleyDigital

1
หรือที่เรียกว่าScope Resolution Operator
CommandZ

1
ฉันชอบเรียก Paamayim Nekudotayim ("::") "CoCo" ว่าย่อมาจาก "colon colon"
ร่ม

14

เมื่ออ่านโค้ดกับตัวเองฉันคิดว่ามันเหมือน "สิ่งที่เป็นเจ้าของ"

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

x->value = y->value

จะอ่านว่า "ค่าของ x เท่ากับค่าของ y"


9

ส่วนใหญ่ฉันใช้วิธีการบางอย่างในวิธีการของ @Tor Valamo ("the B method of A" หรือ "A's B method") แต่บางครั้งก็พูดว่า "dot" เช่น "เรียก A dot B ()"


5
ฉันมักจะพูดว่า "a dot b" ​​เพราะมันเป็นภาษาอื่น ๆ PHP และนักพัฒนาที่ไม่ใช่ PHP ดูเหมือนจะเข้าใจฉันเสมอ
Gareth

1
แท้จริงแล้วฉันกลับไปใช้ "dot" เนื่องจากมันทำสิ่งเดียวกับตัวดำเนินการ dot ในภาษาอื่น ๆ เกือบทั้งหมด คำถามจะกลายเป็นว่าคุณเรียกอะไร->ใน C / C ++ ซึ่งมีฟังก์ชันการทำงานที่แตกต่างจากตัวดำเนินการจุดจริง?
meagar

4

ผู้ดำเนินการทรัพย์สิน.

เวลาอ่าน$a->b()หรือ$a->bพูดดัง ๆ ฉันแค่พูดว่า "call b on the $ a obj" หรือ "get b from / in / of $ a"


1
@ ผมว่า "ตัวดำเนินการวิธี" ด้วย
Marcus Adams

@Marcus Adams - ไม่จริงเพราะวิธีการเป็นเพียงคุณสมบัติที่เป็นฟังก์ชันในภาษาส่วนใหญ่ ใน PHP เพียงอย่างเดียวมีความแตกต่างอย่างมาก แต่ฉันยังคงเรียกมันว่าคุณสมบัติ
Tor Valamo

4

โดยส่วนตัวแล้วฉันชอบที่จะเปิดเผยรหัสของฉันด้วยวาจา

เช่น:

$foo = new Foo();
echo $foo->bar

จะอ่านเช่นนี้:

echo (/ print) คุณสมบัติบาร์ของ object foo

มันละเอียดและใช้เวลานานกว่า แต่ฉันพบว่ามีเหตุผลที่ฉันต้องแสดงรหัสด้วยวาจาหรือไม่ฉันอาจต้องชัดเจนว่าฉันกำลังสื่อสารอะไรกันแน่


4

กลับไปที่ Cobol 'in' โดยที่คุณจะพูดว่า "Move 5 to b in a." ภาษาส่วนใหญ่ในปัจจุบันมีคุณสมบัติในทิศทางอื่น ๆ

แต่ฉันจะยังคงอ่าน$a->b();ว่า "Call b in a"


4
$a->b 

ฉันเรียกว่า "param b ของ $ a"

$a->b()

ฉันเรียกว่า "ฟังก์ชัน b ของ $ a"


3

ลูกศรเดี่ยวสามารถเรียกด้วยวาจาได้อย่างง่ายดายว่าความหมายสำหรับ PHP OOP: Member ดังนั้นสำหรับ$a->varคุณจะพูดว่า "Object a's member var"

เมื่ออ่านออกเสียงโค้ดจะช่วยในการอ่านล่วงหน้า (การอ้างอิง Lookahead ขออภัย) และรู้ว่าคุณอาจอ้างถึงอะไร ตัวอย่างเช่นขอบิตโค้ดต่อไปนี้:

<?php
  Class MyClass {
    $foo = 0;

    public function bar() {
      return $this->foo;
    }
  }

  $myobject = new MyClass();
  $myobject->bar();
?>

ดังนั้นถ้าฉันจะอ่านออกเสียงบล็อกโค้ดนี้เพื่อเป็นการสาธิตโค้ดฉันจะพูดว่า:

"กำหนดคลาส" MyClass ", วงเล็บปีกกาเปิดตัวแปร" foo "เท่ากับศูนย์สิ้นสุดบรรทัดกำหนดวงเล็บเปิด - ปิดฟังก์ชันสาธารณะ" bar "วงเล็บปีกกาเปิดกลับตัวแปรสมาชิก 'foo' ของวัตถุ" this "สิ้นสุดบรรทัด . Close-brace, close-brace สร้างอินสแตนซ์ใหม่ของ "MyClass" (ไม่มีอาร์กิวเมนต์) เป็นตัวแปร "myobject" สิ้นสุดบรรทัดเรียกเมธอดสมาชิกว่า "bar" ของวัตถุ "myobject", สิ้นสุดบรรทัด "

อย่างไรก็ตามหากฉันกำลังอ่านโค้ดดัง ๆ เพื่อให้นักเรียนหรือโปรแกรมเมอร์คนอื่น ๆ คัดลอกโดยไม่มีภาพฉันจะพูดว่า:

"PHP open tag (full), newline, indent, Class MyClass open-brace, newline. indent, ['dollar-sign' | 'Object-marker'] foo เท่ากับ 0, อัฒภาค, บรรทัดใหม่, บรรทัดใหม่. แถบฟังก์ชันสาธารณะ open- วงเล็บปิด, วงเล็บปีกกาเปิด, ขึ้นบรรทัดใหม่เยื้องกลับ ['เครื่องหมายดอลลาร์' | 'วัตถุ - เครื่องหมาย'] ลูกศรนี้ foo, อัฒภาค, ขึ้นบรรทัดใหม่ย้อนกลับ - เยื้อง, รั้งปิด, ขึ้นบรรทัดใหม่, เยื้องกลับ, รั้งปิด , newline, newline. ['dollar-sign' | 'Object-marker'] myobject เท่ากับวงเล็บเปิด - ปิด MyClass ใหม่, อัฒภาค, บรรทัดใหม่ ['เครื่องหมายดอลลาร์' | 'Object-marker'] แถบลูกศร myobject เปิด - ปิด วงเล็บ, อัฒภาค, ขึ้นบรรทัดใหม่เยื้องกลับ, แท็กปิด PHP "

ที่คุณเห็น ['เครื่องหมายดอลลาร์' | 'Object-marker'] เพียงแค่เลือกสิ่งที่คุณมักจะพูดกับ '$' ฉันจะสลับระหว่างสองตัวนี้บ่อยๆขึ้นอยู่กับผู้ชมของฉัน

ดังนั้นเพื่อสรุปใน PHP -> หมายถึงสมาชิกของวัตถุไม่ว่าจะเป็นตัวแปรวัตถุอื่นหรือวิธีการ


1

นักพัฒนา PHP อาวุโสที่ฉันทำงานพูดว่า "arrow"

$A->B;

เมื่อเขาบอกให้ฉันพิมพ์ข้างต้นเขาจะพูดว่า "Dollar A arrow B" หรือ for

$A->B();

"ดอลลาร์ A ลูกศร B parens"


1

ฉันจะทำเช่นนี้:

//Instantiated object variable with the name mono call property name
$mono->name;

//Instantiated object variable with the name mono call method ship
$mono->ship();

ในหนังสือของฉัน ( PHP ปริญญาโทโดยลอร์นามิตเชลล์) ก็เรียกว่าผู้ประกอบการวัตถุ


1

ภาษาญี่ปุ่นมีอนุภาคที่สะดวกสำหรับสิ่งนี้ "ไม่" (の) เป็นอนุภาคที่มีความเป็นเจ้าของซึ่งมีความหมายโดยประมาณว่า "เกี่ยวข้องกับคำก่อนหน้า"

"Fred の badger" หมายถึง "Fred's badger"

ซึ่งเป็นคำพูดที่ยาวเหยียดอย่างน้อยที่สุดในทางจิตใจและในหมู่คนที่เข้าใจภาษาญี่ปุ่นฉันมักจะแยกความแตกต่างโดยการอ่านว่า:

$A->B(); // "Call $A's B."
C::D();  // "Call C の D."

แต่การอ่านทั้งสองอย่างในฐานะเจ้าของก็ใช้ได้เช่นกันสำหรับผู้ที่ไม่ได้ใช้ภาษาญี่ปุ่น คุณยังสามารถพลิกมันและใช้ "ของ" ดังนั้น "D ของ C" ... แต่มันค่อนข้างน่าอึดอัดและยากที่จะอ่านว่าคุณกำลังอ่านอย่างรวดเร็วเพราะมันทำให้การไหลเชิงเส้นของคุณแตก

ถ้าฉันเขียนตามคำบอกบางทีเมื่อจับคู่การเข้ารหัสและแนะนำว่าจะพิมพ์อะไรฉันจะเรียกอักขระเฉพาะว่า "dash-greater-than arrow" และ "double-colon" (ถ้าฉันรู้จักคนที่ฉันพูด ถึงเป็น PHPophile ฉันอาจเรียกสิ่งนั้นว่า "paamayim nekudotayim double-colon" ในครั้งแรกส่วนหนึ่งเป็นเพราะมันเป็นเรื่องตลกที่น่าสนใจส่วนหนึ่งเพื่อป้องกันไม่ให้ "แก้ไข" ฉัน)




0

user187291ได้ตอบคำถามที่ไม่ใช่อัตนัยส่วนคำถามอัตนัยฉันพูดว่า "ย่อย" ตัวอย่างเช่นฉันจะออกเสียง$x->yว่า "x sub y" - "sub" ในบริบทนี้ย่อมาจาก "subscript" สิ่งนี้เหมาะสมกว่าสำหรับสัญกรณ์อาร์เรย์ $x['y']ฉันยังออกเสียง "x sub y" โดยปกติเมื่ออ่านโค้ดออกมาฉันจะใช้คำพูดเพื่อระบุบรรทัดที่นักพัฒนาคนอื่นสามารถมองเห็นได้ดังนั้นความคลุมเครือจึงยังไม่กลายเป็นปัญหา ฉันเชื่อว่าสาเหตุมาจากการที่ฉันมองโครงสร้าง / วัตถุและอาร์เรย์เป็น "คอลเลกชัน" และองค์ประกอบดังกล่าวจะถูกห้อยลงในรูปสัญกรณ์ทางคณิตศาสตร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.