Bahkan jika Anda mengembangkan program PHP baru berskala besar, Anda pasti akan menggunakan data global, karena beberapa data akan digunakan di berbagai bagian kode Anda. Beberapa data global yang umum meliputi: kelas pengaturan program, kelas koneksi database, informasi pengguna, dll. Ada banyak cara untuk menjadikan data ini sebagai data global, yang paling umum digunakan adalah dengan menggunakan deklarasi kata kunci "global", yang akan kami jelaskan secara rinci nanti di artikel.
Satu-satunya kelemahan menggunakan kata kunci "global" untuk mendeklarasikan data global adalah bahwa ini sebenarnya cara pemrograman yang sangat buruk, dan sering kali menyebabkan masalah yang lebih besar di kemudian hari dalam program, karena data global memisahkan kode Anda. Semua segmen kode saling terkait bersama-sama, jadi jika Anda mengubah satu bagian kode, hal itu dapat menyebabkan kesalahan pada bagian lain. Jadi jika ada banyak variabel global dalam kode Anda, maka keseluruhan program Anda akan sulit dikelola.
Artikel ini akan menunjukkan cara mencegah masalah variabel global ini melalui berbagai teknik atau pola desain. Tentu saja, pertama-tama mari kita lihat cara menggunakan kata kunci "global" untuk data global dan cara kerjanya. Menggunakan variabel global dan kata kunci "global"
PHP mendefinisikan beberapa variabel "Superglobal" secara default. Variabel ini secara otomatis diglobalisasi dan dapat dipanggil di mana saja dalam program, seperti $_GET dan $_REQUEST, dll. Biasanya berasal dari data atau data eksternal lainnya, dan penggunaan variabel tersebut biasanya tidak menimbulkan masalah karena pada dasarnya tidak dapat ditulisi.
Tapi Anda bisa menggunakan variabel global Anda sendiri. Dengan menggunakan kata kunci "global", Anda dapat mengimpor data global ke dalam lingkup lokal suatu fungsi. Jika Anda tidak memahami "cakupan penggunaan variabel", silakan merujuk ke instruksi yang relevan di manual PHP.
Berikut ini adalah contoh demonstrasi menggunakan kata kunci "global":
Berikut ini adalah konten yang dikutip:
<?php
$my_var = 'Halo Dunia';
tes_global();
fungsi tes_global() {
// Sekarang dalam lingkup lokal
// variabel $my_var tidak ada
// Menghasilkan kesalahan: "Variabel tidak terdefinisi: my_var"
gema $my_var;
// Sekarang mari kita pentingkan variabelnya
global $my_var;
// Bekerja:
gema $my_var;
}
?>
Seperti yang Anda lihat pada contoh di atas, kata kunci "global" digunakan untuk mengimpor variabel global. Sepertinya ini berfungsi dengan baik dan sederhana, jadi mengapa kita khawatir menggunakan kata kunci "global" untuk mendefinisikan data global?
Berikut tiga alasan bagusnya:
1. Penggunaan kembali kode hampir tidak mungkin.
Jika suatu fungsi bergantung pada variabel global, hampir tidak mungkin untuk menggunakan fungsi ini di lingkungan yang berbeda. Masalah lainnya adalah Anda tidak dapat mengekstrak fungsi ini dan menggunakannya dalam kode lain.
2. Men-debug dan menyelesaikan masalah sangatlah sulit.
Melacak variabel global jauh lebih sulit daripada melacak variabel non-global. Variabel global mungkin didefinisikan ulang dalam beberapa file penyertaan yang tidak jelas, dan bahkan jika Anda memiliki editor program (atau IDE) yang sangat bagus untuk membantu Anda, mungkin diperlukan waktu beberapa jam untuk menemukan masalahnya.
3. Akan sangat sulit untuk memahami kode-kode ini.
Sulit bagi Anda untuk mengetahui dari mana variabel global berasal dan kegunaannya. Selama proses pengembangan, Anda mungkin mengetahui setiap variabel global, tetapi setelah sekitar satu tahun, Anda mungkin melupakan setidaknya beberapa di antaranya. Saat ini, Anda akan menyesal telah menggunakan begitu banyak variabel global.
Jadi jika kita tidak menggunakan variabel global, apa yang kita gunakan? Mari kita lihat beberapa solusinya di bawah ini.
Menggunakan Parameter Fungsi
Salah satu cara untuk berhenti menggunakan variabel global adalah dengan meneruskan variabel sebagai parameter ke fungsi, seperti gambar di bawah ini:
Berikut isi kutipannya:
<?php
$var = 'Halo Dunia';
tes ($var);
tes fungsi($var) {
gema $var;
}
?>
Jika Anda hanya perlu meneruskan variabel global, maka ini adalah solusi yang sangat bagus atau bahkan luar biasa, namun bagaimana jika Anda ingin meneruskan banyak nilai?
Misalnya kita ingin menggunakan kelas database, kelas pengaturan program, dan kelas pengguna. Dalam kode kita, ketiga kelas ini digunakan di semua komponen, sehingga harus diteruskan ke setiap komponen. Jika kita menggunakan metode parameter fungsi, kita harus melakukan ini:
Berikut ini adalah konten yang dikutip:
<?php
$db = Koneksi DB baru;
$pengaturan = Pengaturan_XML baru;
$pengguna = Pengguna baru;
tes($db, $pengaturan, $pengguna);
tes fungsi(&$db, &$pengaturan, &$pengguna) {
// Lakukan sesuatu
}
?>
Jelas sekali, ini tidak sepadan, dan begitu kita memiliki objek baru untuk ditambahkan, kita harus menambahkan satu parameter fungsi lagi ke setiap fungsi. Jadi kita perlu menggunakan cara lain untuk menyelesaikannya.