PHP veritabanı erişimi olan tekil için bir kullanım-vaka var mı?

0 Cevap php

Ben PDO benim MySQL veritabanına erişebilir. Ben veritabanına erişim kuruyorum, ve benim ilk denemem aşağıdaki kullanımı idi:

Ben düşündüm ilk şey global:

$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');

function some_function() {
    global $db;
    $db->query('...');
}

Bu kötü bir uygulama olarak kabul edilir. Biraz arama yaptıktan sonra, ben, Singleton pattern ile sona erdi

"Bir sınıfın tek bir örneği olması gerekir hangi durumlar için geçerlidir."

Kılavuzundaki örneğe göre, bunu yapmalıyız:

class Database {
    private static $instance, $db;

    private function __construct(){}

    static function singleton() {
        if(!isset(self::$instance))
            self::$instance = new __CLASS__;

        return self:$instance;
    }

    function get() {
        if(!isset(self::$db))
            self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd')

        return self::$db;
    }
}

function some_function() {
    $db = Database::singleton();
    $db->get()->query('...');
}

some_function();

Ben bunu yapabilirsiniz Neden bunu nispeten büyük sınıf gerekiyor?

class Database {
    private static $db;

    private function __construct(){}

    static function get() {
        if(!isset(self::$rand))
            self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd');

        return self::$db;
    }
}

function some_function() {
    Database::get()->query('...');
}

some_function();

Bu sonuncusu mükemmel çalışıyor ve ben artık $db hakkında endişelenmenize gerek yoktur.

Nasıl küçük bir singleton sınıf oluşturabilirsiniz, ya da ben PHP kaçırıyorum tekil için kullanım durum var mı?

0 Cevap