Как я могу использовать другой объект внутри класса? - PullRequest
0 голосов
/ 29 мая 2009

Если я создаю объект внутри основной области видимости:

index.php:

$db = new database();

Тогда как я могу использовать этот же объект внутри совершенно другого класса?

ANYTHING.PHP:

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

Должен ли я сделать глобальный $ db или есть более «лучший» более очевидный способ?

Ответы [ 5 ]

1 голос
/ 29 мая 2009

Для БД вы можете использовать Singleton pattern

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

Возможно, вы захотите расширить его, если вам нужны разные подключения к БД одновременно (то есть основная база данных и база данных форума). Затем вы будете использовать его как DB::getInstance('forum'); и хранить экземпляры в ассоциативном массиве.

1 голос
/ 29 мая 2009

Вы можете просто использовать global, чтобы найти его:

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

Или вы можете передать его при создании нового чего-либо:

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

Это действительно зависит от того, что имеет для вас наибольшее значение.

0 голосов
/ 29 мая 2009

В посте Паоло:

После того, как вы передадите его, вы можете назначить его переменной класса следующим образом:

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

    function getUsers() {
        return $this->db_obj->execute($something);
    }
}
0 голосов
/ 29 мая 2009

Как предположили Паоло и ONi, вы можете определить глобальный $ db внутри метода или передать его в конструктор класса. Передача его создаст ссылку на этот объект, так что на самом деле это будет тот же объект $ db. Вы также можете использовать массив $ GLOBALS и ссылаться на $ db таким образом.

$GLOBALS["db"];

Я предполагаю, что index.php и что-нибудь .php каким-то образом связаны вместе с помощью include () или require () или каким-либо подобным методом?

0 голосов
/ 29 мая 2009

Вы могли бы передать это как аргумент, как это

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

затем, когда вы создаете экземпляр чего-либо, делайте это как anything($db)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...