การประเมินเนมสเปซ PHP


11

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

บางจุดของการพิจารณากับ namespaces:

  • อีกวิธีหนึ่งที่โครงการของฉันพยายามสร้างความแตกต่างด้วยการจัดทำ API ที่ง่ายกว่าโครงการที่คล้ายกันอื่น ๆ เนื่องจากเนมสเปซเป็นของใหม่และเพราะมันซับซ้อนกว่าแบบแผนการตั้งชื่อ PEAR การแนะนำให้ใช้ใน codebase จะทำให้โครงการของฉันใช้งานได้ง่ายขึ้น ด้วยการใช้พวกเขาทำให้สูญเสียความแตกต่างในแง่ของความง่ายในการใช้งาน
  • ในขณะที่ฉันเห็นประโยชน์บางประการต่อ namespaces พวกเขาดูเหมือนจะไม่สามารถแก้ปัญหาที่ต้องแก้ไขในผลิตภัณฑ์ PHP ที่ทันสมัยซึ่งใช้หลักการตั้งชื่อ PEAR ความขัดแย้งของการตั้งชื่อในขณะที่ใช้โครงการของฉันควรน้อยที่สุดหากไม่มีอยู่จริง
  • นี้บทความให้ฉันหยุดบางส่วนในการนำ namespaces การดำเนินการของพวกเขาได้รับน้อยกว่าที่เป็นตัวเอก
  • ฉันยังลังเลที่จะกระโดดขึ้นไปบนเกวียนที่ไม่สามารถไปได้ทุกที่ เนื่องจากเนมสเปซเป็นฟีเจอร์ใหม่สำหรับ PHP ฉันยังไม่มั่นใจว่ามันจะกลายเป็นมาตรฐาน
  • ความเข้ากันได้ โค้ด PHP เกือบทั้งหมดที่เคยเขียนไม่ได้ใช้เนมสเปซเพราะเป็นคุณสมบัติใหม่ ห้องสมุดอื่น ๆ จะเข้ากันไม่ได้หากไม่มีการแปลง

บางจุดสำหรับการใช้เนมสเปซ:

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

จากสิ่งที่ฉันสามารถบอกได้คุณต้องเลือกทางเดียวหรืออื่น ๆ ; คุณทำทั้งสองอย่างไม่ได้ มีจุดใดบ้างที่ฉันไม่ได้พิจารณา มีสัญญาณบ่งชี้ใด ๆ (ไม่มีข้อบกพร่องโปรด) ที่ชี้ไปทางหรือต่อต้านเนมสเปซกลายเป็นมาตรฐานระดับมืออาชีพสำหรับ PHP? ฉันขอขอบคุณข้อมูลเชิงลึกหรือแหล่งข้อมูลที่คุณยินดีที่จะแบ่งปันในขณะที่ฉันต้องตัดสินใจในไม่ช้า

คำตอบ:


5

สองสัญญาณที่ว่า namespaces ใน PHP อยู่ที่นี่:

  1. โครงการ PEAR การตั้งชื่อที่ถูกทอดทิ้งในความโปรดปรานของ namespaces ในPEAR2
  2. หนึ่งในเป้าหมายที่ระบุไว้ของ Zend Framework 2.0 คือเป็นตัวอย่างของการใช้งาน PHP 5.3โดยใช้ namespaces อย่างเต็มที่ท่ามกลางสิ่งอื่น ๆ ฉันคิดว่านี่เป็นตัวบ่งชี้ที่แข็งแกร่งว่า Zend มุ่งมั่นอย่างเต็มที่ที่จะใช้ namespaces และจะให้การสนับสนุนและพัฒนาพวกเขาต่อไป (หวังว่าจะดีขึ้น)

ฉันเห็นด้วยอย่างยิ่งกับคุณว่าการใช้งาน namespaces ปัจจุบันยังขาดอยู่เพื่อพูดให้น้อยที่สุด แต่ข้อโต้แย้งของคุณที่มีต่อการใช้งานนั้นไม่มั่นคง แม้ในรูปแบบปัจจุบันเนมสเปซยังมีไว้สำหรับ:

  • การจัดระเบียบโค้ดที่ดีกว่า
  • หลีกเลี่ยงการตั้งชื่อชน
  • บริบทสำหรับคลาสฟังก์ชันและค่าคงที่

โปรดทราบว่าการขัดแย้งกับเนมสเปซ PHP ส่วนใหญ่นั้นเป็นการเปรียบเทียบกับการนำไปใช้งานในภาษาอื่นและไม่เปรียบเทียบกับข้อดีที่แท้จริงของพวกเขาเป็นคุณลักษณะ


+1 สำหรับลิงก์ คุณสามารถขยายการจัดระเบียบโค้ดและจุดบริบทให้ดีขึ้นได้หรือไม่ ฉันมีเวลาเล็กน้อยในการทำความเข้าใจว่ามันให้การจัดระเบียบโค้ดที่ดีขึ้นได้อย่างไร ดูเหมือนว่าโครงการส่วนใหญ่จะติดกับคลาส 1: 1 เพื่อจัดโครงสร้างไฟล์ในโลจิคัลไดเร็กทอรีเช่นเดียวกับที่คุณใช้ในโครงร่างการตั้งชื่อ PEAR แม้แต่ ZF2 ดูเหมือนว่ามันกำลังใช้ไดเรกทอรีและโครงสร้างไฟล์เดียวกันในกรณีส่วนใหญ่ แต่ตอนนี้มีเนมสเปซ มันแตกต่างกันไป แต่ฉันไม่เห็นว่ามันจะดีกว่าหรือจัดระเบียบมากกว่าไดเรกทอรีและไฟล์ที่มีชื่อในตอนแรก
VirtuosiMedia

ฉันมีปัญหากับประเด็นบริบทเช่นกัน หากมีสิ่งใดดูเหมือนว่าเนมสเปซจะลบบริบทเพื่อให้มีรูปแบบการเขียนที่กระชับมากกว่าการเพิ่มบริบท ตัวอย่างเช่นถ้าฉันสร้างคลาสใหม่ให้ลึกลงไปในไฟล์ตอนนี้ฉันต้องหาที่ที่เนมสเปซได้รับการประกาศให้เข้าใจว่าคลาสใดที่มันเป็นคลาสมากกว่าที่จะให้คลาสนั้นปรากฏในชื่อคลาสทันที ถ้าฉันไม่มีอะไรหายไปดูเหมือนว่าเนมสเปซนั้นมีความละเอียดน้อยกว่า แต่ใช้ความชัดเจน
VirtuosiMedia

@VirtuosiMedia ลูกแพร์และแผนการตั้งชื่อ ZF แบบเก่าเลียนแบบเนมสเปซดังนั้นจุดสามจุดของฉันก็ค่อนข้างเป็นความจริงสำหรับพวกเขาเช่นกัน สิ่งที่ฉันพยายามจะชี้ให้เห็นก็คือว่าถ้าประเด็นเหล่านั้นเป็นจริงในการติดตั้งเนมสเปซ PHP ในปัจจุบันแล้ว Snafus ขนาดเล็กของพวกเขาก็ไม่เพียงพอที่จะไม่ใช้ ด้วยการจัดระเบียบโค้ดที่ดีกว่าฉันหมายถึงส่วนใหญ่ในไฟล์โดยใช้โครงสร้างที่เหมาะสมและมีเหตุผลและลำดับชั้นสำหรับคลาสของคุณสิ่งที่แน่นอนเป็นไปได้โดยไม่มีเนมสเปซ แต่เนมสเปซ (และโครงร่างที่เลียนแบบ ) เป็นคุณลักษณะที่ช่วยให้คุณบรรลุคะแนนทั้งสามในครั้งเดียว
yannis

Gotcha ขอขอบคุณสำหรับการชี้แจง. คุณเห็นข้อได้เปรียบที่สำคัญสำหรับเนมสเปซจริงมากกว่าเนมสเปซที่จำลองขึ้นหรือไม่
VirtuosiMedia

1
@VirtuosiMedia คะแนนทั้งหมดในการใช้เนมสเปซที่คุณทำกับคำถามนั้นถูกต้อง เพื่อที่ฉันจะเพิ่มที่ PHP namespaces ช่วยให้รหัสของคุณรู้สึกเป็นธรรมชาติมากขึ้นเล็กน้อยเพื่อ coders จากภูมิหลังที่แตกต่างกันสิ่งที่อาจมีค่าในโครงการขนาดใหญ่ นอกจากนี้ยังมีไม่ได้เป็นมาตรฐานสำหรับการเทิดทูน namespaces, แน่ใจว่าส่วนใหญ่ของพวกเขาเป็นเรื่องเดียวกัน แต่ใช้จริง namespaces เพื่อให้แน่ใจว่าทุกคนจะใช้สคีเดียวกัน BTW มีnamespacerออกมีคุณสามารถใช้เพื่อ namespacify รหัสของคุณ
yannis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.