พื้นที่เก็บข้อมูลนี้เป็นส่วนหนึ่งของโครงการ Refactoring.Guru
ประกอบด้วยตัวอย่าง PHP สำหรับรูปแบบการออกแบบ GoF แบบคลาสสิกทั้งหมด
แต่ละรูปแบบประกอบด้วยสองตัวอย่าง:
ตัวอย่าง แนวคิด แสดงโครงสร้างภายในของรูปแบบ รวมถึงความคิดเห็นโดยละเอียด
ตัวอย่าง RealWorld แสดงให้เห็นว่าสามารถใช้รูปแบบในแอปพลิเคชัน PHP ในโลกแห่งความเป็นจริงได้อย่างไร
ตัวอย่างเหล่านี้ต้องใช้ PHP 7.3 และใหม่กว่า แม้ว่าจะสามารถจำลองแบบได้อย่างง่ายดายใน PHP เวอร์ชันเก่าก็ตาม
เวอร์ชันนี้มีอาร์กิวเมนต์ที่ชัดเจนและการประกาศประเภทการส่งคืน ซึ่งช่วยให้เข้าใจคุณลักษณะบางอย่างของรูปแบบที่ไม่ชัดเจนในภาษาที่พิมพ์แบบไดนามิกได้ดียิ่งขึ้น
ตัวอย่างทั้งหมดสามารถเปิดใช้งานได้ผ่านทางบรรทัดคำสั่ง โดยใช้ไฟล์ปฏิบัติการ PHP ดังต่อไปนี้:
php src/Path-to-example/index.php
เพื่อประสบการณ์ที่ดีที่สุด ฉันขอแนะนำให้ใช้ตัวอย่างกับ IDE เหล่านี้:
ฉันไม่มีแนวคิดที่ดีสำหรับการใช้งานในโลกแห่งความเป็นจริงสำหรับแอป PHP ทั้งสองนี้ หากคุณเคยใช้สิ่งเหล่านี้ในโครงการของคุณ โปรดแนะนำแนวคิดให้ฉันได้โดยการโพสต์ปัญหา
Client หมายถึง ไคลเอนต์ของคลาสที่กำหนดเป็นส่วนหนึ่งของรูปแบบ ซึ่งเป็นเพียงผู้เรียกวิธีการที่กำหนดหรือผู้ใช้ของคลาสที่กำหนด กล่าวอีกนัยหนึ่ง มันเป็นส่วนหนึ่งของโค้ดแอปพลิเคชันของคุณที่ใช้คลาสของรูปแบบ
ลองดูตัวอย่างแนวคิดก่อน คุณจะพบคำอธิบายโดยละเอียดของแต่ละคลาสในรูปแบบ บทบาทของคลาส และการเชื่อมต่อกับคลาสอื่นๆ
ฉันขอขอบคุณสำหรับความช่วยเหลือ ไม่ว่าจะเป็นการแก้ไขคำผิดหรือตัวอย่างใหม่ทั้งหมด เพียงทำส้อม ทำการเปลี่ยนแปลง และส่งคำขอดึง
ต่อไปนี้คือคำแนะนำสไตล์ซึ่งอาจช่วยให้คุณรักษาการเปลี่ยนแปลงให้สอดคล้องกับโค้ดที่เหลือของโปรเจ็กต์:
รหัสทั้งหมดควรตรงกับคำแนะนำรูปแบบการเขียนโค้ด PSR2
พยายามห่อโค้ดอย่างหนักด้วยอักขระที่ 80 ช่วยแสดงรายการรหัสบนเว็บไซต์โดยไม่มีแถบเลื่อน
ตัวอย่างควรตรงกับรูปแบบเนมสเปซต่อไปนี้: RefactoringGuru{pattern-name}{example-name} ตัวอย่างเช่น:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
ตั้งเป้าที่จะใส่โค้ดทั้งหมดไว้ในไฟล์เดียว ใช่ ฉันตระหนักดีว่านี่ไม่ใช่วิธีที่ควรจะทำในการผลิต อย่างไรก็ตาม มันช่วยให้ผู้คนเข้าใจตัวอย่างได้ดีขึ้น เนื่องจากโค้ดทั้งหมดรวมอยู่ในหน้าจอเดียว
ความคิดเห็นอาจมีหรือไม่มีแท็กภาษาอยู่ เช่น:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
สัญลักษณ์นี้ช่วยเก็บโค้ดไว้ในที่เดียวในขณะที่อนุญาตให้เว็บไซต์สร้างตัวอย่างเวอร์ชันแยกกันสำหรับภาษาที่แสดงทั้งหมด อย่ากลัวและเพิกเฉยต่อความคิดเห็นดังกล่าวในส่วนที่ไม่ใช่ภาษาอังกฤษ หากคุณต้องการเปลี่ยนแปลงบางอย่างในความคิดเห็นเช่นนี้ ก็แค่ทำไป แม้ว่าคุณจะทำผิด เราจะบอกวิธีแก้ไขในระหว่างการขอดึงข้อมูล
งานนี้ได้รับอนุญาตภายใต้ Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License
ผู้เขียน: Alexander Shvets (@neochief) และ Alexey Pyltsyn (@lex111)