“ elseif” และ“ else if” ตรงกันอย่างสมบูรณ์หรือไม่


170

เป็น elseifและelse ifความหมายเหมือนกันอย่างสมบูรณ์หรือมีความแตกต่างกัน?

Zend มี "มาตรฐาน" ที่เป็นที่ยอมรับในการใช้หรือไม่?

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


10
ไม่ใช่ทุกภาษาที่ใช้else ifโดยวิธีการ ยกตัวอย่างเช่น VB ยังใช้และการใช้ทับทิมElseIf elsif
Daniel Vandersluis

6
และ shell / bash ใช้ elif
knittl

7
หลามยังใช้ elif
gregghz

คำตอบ:


218

จากคู่มือ PHP :

ใน PHP คุณสามารถเขียน 'else if' (สองคำ) และพฤติกรรมจะเหมือนกับหนึ่งใน 'elseif' (ในคำเดียว) ความหมายของคำศัพท์นั้นแตกต่างกันเล็กน้อย (ถ้าคุณคุ้นเคยกับ C นี่คือพฤติกรรมเดียวกัน) แต่บรรทัดล่างคือทั้งคู่จะส่งผลให้เกิดพฤติกรรมเดียวกัน

โดยพื้นฐานแล้วพวกมันจะทำตัวเหมือนกัน แต่ในelse ifทางเทคนิคเทียบเท่ากับโครงสร้างแบบซ้อนเช่น:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

คู่มือยังบันทึก:

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

ซึ่งหมายความว่าในรูปแบบโครงสร้างการควบคุมปกติ (เช่นการใช้วงเล็บปีกกา):

if (first_condition)
{

}
elseif (second_condition)
{

}

อย่างใดอย่างหนึ่งelseifหรือelse ifสามารถนำมาใช้ อย่างไรก็ตามหากคุณใช้ไวยากรณ์ทางเลือกคุณต้องใช้elseif:

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;

18
ทำได้ดีมากกับตัวอย่างโค้ด ถ้ามีอะไรไวยากรณ์อื่นเป็นสิ่งที่จำเป็นที่จะต้องพิสูจน์ว่า PHP ก็ถือว่าเป็นelse if else { if {
BoltClock

2
PHP ไม่ถือว่าelse ifเป็นelse { if {อย่างอื่นคุณจะไม่สามารถทำได้if (0) { } else if (0) { } else { }...
Guido Hendriks

4
@GuidoHendriks: ไม่ใช่ว่าจะถือว่าเป็นอีกอันหนึ่ง แต่ก็เทียบเท่ากับหน้าที่ if (0) { } else { if (0) { } else { } }ตัวอย่างของคุณจะเทียบเท่ากับรูปแบบที่ซ้อนกัน โปรดทราบว่าไม่มีความคลุมเครือในelseบล็อกสุดท้ายซึ่งมักเป็นกรณีของสาขาที่สมบูรณ์ (ทุกสาขาifมีelse)
outis

นี่เป็นอีกตัวอย่างสำหรับการอ้างอิงphp.net/manual/en/control-structures.elseif.php#115851
WhyAyala

ด้วย synyax ที่เป็นทางเลือกคุณต้องจำ 'โคลอน' และจุดสิ้นสุดของส่วนในถ้า: if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif; เท่ากับ; if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;
ท.บ.

47

Framework Interoperability Group (FIG) ซึ่งประกอบด้วยสมาชิกที่มีนักพัฒนาของ Zend ( https://github.com/php-fig/fig-standards#voting-members) ) วางชุดคำแนะนำมาตรฐาน (PSR) - #)

Zend2 และ Symfony2 ติดตาม PSR-0 แล้ว

ไม่มีกฎที่ยากและรวดเร็วสำหรับสไตล์ แต่คุณสามารถลองและปฏิบัติตาม PSR-2 ได้มากเท่าที่จะทำได้

มีความคิดเห็นในสิ่งอื่นถ้า vs elseif ใน PSR-2:

คำหลัก elseif ควรใช้แทนมิฉะนั้นถ้าเป็นเช่นนั้นคำหลักควบคุมทั้งหมดดูเหมือนคำเดียว

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#51-if-elseif-else

คำแนะนำบางส่วนเป็นเพียงคำแนะนำ มันขึ้นอยู่กับคุณว่าจะใช้อย่างอื่นถ้าหรืออย่างอื่น


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