Nasıl bir sınıf içinde farklı bir nesnesi kullanabilirsiniz?

5 Cevap php

Ben ana kapsamı içinde bir nesne oluşturursanız:

Index.php:

$db = new database();

O zaman nasıl tamamen farklı bir sınıfın içinde bu aynı nesneyi kullanabilirsiniz?

ANYTHING.PHP:

class anything {
    function __construct(){
        $db->execute($something); # I want to use the same object from INDEX.PHP
    }
}

Ben küresel bir db $ yapmak gerekir ya da 'iyi' bir daha belirgin bir yolu var misiniz?

5 Cevap

Sadece global bulmak için kullanabilirsiniz:

class anything {
    function __construct(){
        global $db;
        $db->execute($something);
    }
}

Yoksa, yeni bir şey yaratma zaman içinde geçebileceği:

class anything {
    function __construct($db) {
        $db->execute($something);
    }
}

Bu gerçekten sizin için en mantıklı ne bağlıdır.

DB için kullanmak isteyebilirsiniz Singleton pattern

class anything 
{
    public function load($id)
    {
        $db = DB::getInstance();
        $res = $db->query('SELECT ... FROM tablename WHERE id = '.(int)$id);
        // etc...
    }
}

Eğer aynı anda (yani ana db ve forumun db) farklı DB bağlantıları gerekiyorsa bunu genişletmek isteyebilirsiniz. Sonra ilişkisel dizi DB::getInstance('forum'); ve mağaza örnekleri gibi kullanacağız.

Böyle bir argüman olarak geçebileceği

function __construct($db){
   $db->execute($something);
}

o zaman örnek bir şey olarak bunu anything($db)

Paolo ve oni önerildiği gibi yöntemi içinde global olarak $ db tanımlamak veya sınıfın yapıcısı içine geçebilir. Aslında aynı $ db nesne olacak yüzden geçen bu nesneye bir başvuru yaratacaktır. Ayrıca bu şekilde db $ GLOBALS dizi ve referans $ kullanabilirsiniz.

$GLOBALS["db"];

Ben index.php ve anything.php include () ya da (gerektiren her nasılsa birbirine bağlantılı olduğunu varsayarak) ya da benzer bir yöntem ediyorum?

Paolo yazı:

Bunu geçtikten sonra, daha sonra böyle bir sınıf değişkeni atayabilirsiniz:

class anything {
    var $db_obj;
    function __construct($db) {
        $this->db_obj = $db;
    }

    function getUsers() {
        return $this->db_obj->execute($something);
    }
}