Repositori ini adalah bagian dari proyek Refactoring.Guru.
Ini berisi contoh PHP untuk semua pola desain GoF klasik.
Setiap pola mencakup dua contoh:
Contoh konseptual menunjukkan struktur internal pola, termasuk komentar rinci.
Contoh RealWorld menunjukkan bagaimana pola dapat digunakan dalam aplikasi PHP dunia nyata.
Contoh-contoh ini memerlukan PHP 7.3 dan yang lebih baru, meskipun dapat dengan mudah direplikasi di versi PHP yang lebih lama.
Versi ini memberikan argumen eksplisit dan deklarasi tipe kembalian, yang membantu memahami lebih baik beberapa fitur pola yang tidak terlalu jelas dalam bahasa yang diketik secara dinamis.
Semua contoh dapat diluncurkan melalui baris perintah, menggunakan PHP yang dapat dieksekusi sebagai berikut:
php src/Path-to-example/index.php
Untuk pengalaman terbaik, saya sarankan menggunakan contoh dengan IDE berikut:
Saya kehabisan ide bagus untuk penggunaan dunia nyata untuk keduanya di aplikasi PHP. Jika Anda telah menggunakannya dalam proyek Anda, jangan ragu untuk memberi saya ide dengan memposting Masalah.
Klien berarti klien kelas, yang didefinisikan sebagai bagian dari suatu pola , yang hanya merupakan pemanggil metode tertentu atau pengguna kelas tertentu. Dengan kata lain, itu adalah bagian dari kode aplikasi Anda yang menggunakan kelas pola.
Lihatlah contoh konseptualnya terlebih dahulu. Di sana Anda akan menemukan deskripsi rinci setiap kelas dalam suatu pola, perannya, dan hubungannya dengan kelas lain.
Saya menghargai bantuan apa pun, baik itu perbaikan sederhana atas kesalahan ketik atau contoh baru. Buat saja garpu, lakukan perubahan, dan kirimkan permintaan tarik.
Berikut panduan gaya yang mungkin membantu Anda menjaga perubahan tetap konsisten dengan kode proyek lainnya:
Semua kode harus sesuai dengan panduan gaya pengkodean PSR2
Cobalah untuk membungkus kode dengan keras pada karakter ke-80. Ini membantu untuk mencantumkan kode di situs web tanpa scrollbar.
Contoh harus sesuai dengan konvensi namespace berikut: RefactoringGuru{pattern-name}{example-name}. Misalnya:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
Bertujuan untuk meletakkan semua kode dalam satu file. Ya, saya menyadari bahwa hal itu tidak seharusnya dilakukan dalam produksi. Namun, ini membantu orang untuk memahami contoh dengan lebih baik, karena semua kode cocok dalam satu layar.
Komentar mungkin memiliki tag bahasa atau tidak, seperti ini:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
Notasi ini membantu menyimpan kode di satu tempat sekaligus memungkinkan situs web menghasilkan versi contoh terpisah untuk semua bahasa yang terdaftar. Jangan takut dan abaikan bagian non-Inggris dari komentar tersebut. Jika Anda ingin mengubah sesuatu di komentar seperti ini, lakukan saja. Bahkan jika Anda salah melakukannya, kami akan memberi tahu Anda cara memperbaikinya selama Pull Request.
Karya ini dilisensikan di bawah Lisensi Internasional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0.
Penulis: Alexander Shvets (@neochief) dan Alexei Pyltsyn (@lex111)