Opsi yang saya lihat dengan kelebihan / kelemahan relatif adalah:
Mekanisme berbasis file
Ini mengharuskan kode Anda mencari di lokasi tertentu untuk menemukan file ini. Ini adalah masalah yang sulit dipecahkan dan selalu muncul di aplikasi PHP besar. Namun Anda mungkin perlu menyelesaikan masalah untuk menemukan kode PHP yang dimasukkan / digunakan kembali saat runtime.
Pendekatan umum untuk ini adalah selalu menggunakan direktori relatif, atau mencari dari direktori saat ini ke atas untuk menemukan file yang dinamai secara eksklusif di direktori dasar aplikasi.
Format file yang umum digunakan untuk file konfigurasi adalah kode PHP, file berformat ini, JSON, XML, YAML dan PHP serial
Kode PHP
Ini memberikan sejumlah besar fleksibilitas untuk merepresentasikan struktur data yang berbeda, dan (dengan asumsi itu diproses melalui penyertaan atau memerlukan) kode parsing akan tersedia dari cache opcode - memberikan manfaat kinerja.
The include_path menyediakan sarana untuk abstrak lokasi potensi file tanpa bergantung pada kode tambahan.
Di sisi lain, salah satu alasan utama untuk memisahkan konfigurasi dari kode adalah untuk memisahkan tanggung jawab. Ini menyediakan rute untuk memasukkan kode tambahan ke dalam runtime.
Jika konfigurasi dibuat dari alat, dimungkinkan untuk memvalidasi data dalam alat, tetapi tidak ada fungsi standar untuk melepaskan data untuk disematkan ke kode PHP seperti yang ada untuk HTML, URL, pernyataan MySQL, perintah shell ... .
Data berseri
Ini relatif efisien untuk sejumlah kecil konfigurasi (hingga sekitar 200 item) dan memungkinkan penggunaan struktur data PHP apa pun. Diperlukan sedikit kode untuk membuat / mengurai file data (jadi Anda dapat melakukan upaya Anda untuk memastikan bahwa file hanya ditulis dengan otorisasi yang sesuai).
Pelolosan konten yang ditulis ke file ditangani secara otomatis.
Karena Anda dapat membuat serial objek, hal itu menciptakan peluang untuk memanggil kode hanya dengan membaca file konfigurasi (metode ajaib __wakeup).
File terstruktur
Menyimpannya sebagai file INI seperti yang disarankan oleh Marcel atau JSON atau XML juga menyediakan api sederhana untuk memetakan file ke dalam struktur data PHP (dan dengan pengecualian XML, untuk keluar dari data dan membuat file) sambil menghilangkan pemanggilan kode kerentanan menggunakan data PHP serial.
Ini akan memiliki karakteristik kinerja yang mirip dengan data serial.
Penyimpanan database
Ini paling baik dipertimbangkan di mana Anda memiliki sejumlah besar konfigurasi tetapi selektif dalam apa yang diperlukan untuk tugas saat ini - Saya terkejut menemukan bahwa di sekitar 150 item data, lebih cepat untuk mengambil data dari instance MySQL lokal daripada unserialize sebuah datafile.
OTOH ini bukan tempat yang baik untuk menyimpan kredensial yang Anda gunakan untuk terhubung ke database Anda!
Lingkungan eksekusi
Anda dapat menetapkan nilai di lingkungan eksekusi tempat PHP dijalankan.
Ini menghapus persyaratan apa pun agar kode PHP terlihat di tempat tertentu untuk konfigurasi. OTOH tidak menskalakan dengan baik ke sejumlah besar data dan sulit untuk diubah secara universal saat runtime.
Di klien
Satu tempat yang tidak saya sebutkan untuk menyimpan data konfigurasi adalah di klien. Sekali lagi, overhead jaringan berarti bahwa ini tidak berskala dengan baik untuk konfigurasi dalam jumlah besar. Dan karena pengguna akhir memiliki kendali atas data itu harus disimpan dalam format di mana setiap gangguan dapat dideteksi (yaitu dengan tanda tangan kriptografi) dan tidak boleh berisi informasi apa pun yang dikompromikan oleh pengungkapannya (yaitu dienkripsi secara terbalik).
Sebaliknya, ini memiliki banyak manfaat untuk menyimpan informasi sensitif yang dimiliki oleh pengguna akhir - jika Anda tidak menyimpannya di server, informasi tersebut tidak dapat dicuri dari sana.
Direktori Jaringan
Tempat lain yang menarik untuk menyimpan informasi konfigurasi di DNS / LDAP. Ini akan bekerja untuk sejumlah kecil informasi kecil - tetapi Anda tidak perlu menggunakan bentuk normal pertama - pertimbangkan, misalnya SPF .
Infrastruktur mendukung caching, replikasi dan distribusi. Oleh karena itu, ini berfungsi dengan baik untuk infrastruktur yang sangat besar.
Sistem Kontrol Versi
Konfigurasi, seperti kode harus dikelola dan versi dikontrol - karenanya mendapatkan konfigurasi langsung dari sistem VC Anda adalah solusi yang layak. Tetapi seringkali hal ini disertai dengan overhead kinerja yang signifikan, karenanya caching mungkin disarankan.