Bir veritabanı bir örneği ana bildirilmiş sınıf, index.php
olarak sahip
$db = new Database();
$db
değişken küresel bildirmek zorunda kalmadan tüm diğer sınıfların tanınması için bir yolu var mı
global $db;
Her sınıfın yapıcısı mi?
Hayır her sınıfın yapıcısı Küresel $ db beyan etmek zorunda.
ya Küresel dizi kullanabilirsiniz: $ _GLOBALS ['vars'];
Bunu aşmanın tek yolu (Here bir açıklama için bakınız) Singleton Method denilen, onu sarmak için bir statik sınıf kullanmaktır. Ama bu çok kötü bir uygulamadır.
class myClass
{
static $class = false;
static function get_connection()
{
if(self::$class == false)
{
self::$class = new myClass;
}
else
{
return self::$class;
}
}
// Then create regular class functions.
}
Tekiz yöntemi emin herhangi bir sınıfın tek bir örneği vardı yapmak için oluşturuldu. Insanlar globalling kısayol için bir yol olarak kullanın çünkü Ama, tembel / kötü programlama olarak bilinen olur.
StackOverflow Knowledge
How to Avoid Using PHP Global Objects
Share Variables Between Functions in PHP Without Using Globals
Making a Global Variable Accessible For Every Function inside a Class
Global or Singleton for Database Connection
Ben bunu biraz farklı yapmak. Ben genellikle bir global uygulama nesnesi (App) var. O nesnenin içinde ben vs benim db nesneleri önbelleğe alma nesneleri oluşturma gibi bazı temel başlatma yapın
Ben de böylece (uygulama nesne tanımı gösterilmemiştir) .... App nesnesi döndüren bir küresel işlevi vardır:
define('APPLICATION_ID', 'myApplication');
${APPLICATION_ID} = new App;
function app() {
return $GLOBALS[APPLICATION_ID];
}
Öyleyse ben küresel nesne içindeki nesneleri başvurmak için herhangi bir kod aşağıdaki gibi bir şey her yerde kullanabilirsiniz:
app()->db->read($statement);
app()->cache->get($cacheKey);
app()->debug->set($message);
app()->user->getInfo();
Mükemmel değil ama birçok durumda işleri kolaylaştırmak için bulabilirsiniz.
Sen Database
örneğini saklamak ve almak için bir Registry
sınıfını kullanabilirsiniz.
class Registry
{
protected static $_data = array();
public static function set($key, $value)
{
self::$_data[$key] = $value;
}
public static function get($key, $default = null)
{
if (array_key_exists($key, self::$_data)) {
return self::$_data[$key];
}
return $default;
}
}
Registry::set('db', new Database());
$db = Registry::get('db');