Ada beberapa cara untuk melakukannya. Variabel global tentu salah satu cara dan yang paling dipandang rendah juga. Anda dapat membuat Singleton dan semua kelas lain yang membutuhkan akses database akan memanggil singleton ini.
final class Database {
private static $connection;
public static function getInstance() {
if(self::$connection == NULL) {
self::$connection = // init your database connection
}
return self::$connection;
}
}
Dan gunakan objek koneksi database ini di kelas apa pun yang membutuhkannya.
class Application {
public function displayVar() {
echo 'hello world';
}
public function getVar() {
$db = Database::getInstance();
$sql = foo;
$db->query($sql);
}
}
Ini semua baik untuk permulaan dan langkah besar selain menggunakan variabel global, tetapi Anda dapat melakukannya lebih baik dengan Injeksi Ketergantungan . Injeksi Ketergantungan adalah konsep sederhana bahwa jika suatu kelas memiliki dependensi eksternal, seperti koneksi database dalam contoh Anda, Anda secara eksplisit meneruskannya ke kelas yang membutuhkan dalam konstruktor atau metodenya. Jadi kode baru akan terlihat seperti solusi Jonathan. Keuntungan utama menggunakan injeksi ketergantungan adalah dalam pengujian unit, di mana Anda dapat dengan mudah mengganti objek database aktual ini dengan objek tiruan dan menyebarkannya kepada siapa pun yang membutuhkannya.
class Application {
private $db;
public function __construct(Database $db) {
$this->db = $db;
}
public function displayVar() {
echo 'hello world';
}
public function getVar() {
$sql = foo;
$this->db->query($sql);
}
}
Untuk proyek yang lebih kecil, Anda dapat melakukannya sendiri dengan mudah. Untuk proyek besar, ada berbagai DI frameworks tersedia untuk PHP