Tomasz
Tomasz

Reputation: 295

php objects interaction - calling instances within other instances

I created a simple database connection class:

class db {

private $db_host = "host";
private $db_user = "user";
private $db_pass = "pass";
private $db_name = "db_name";

public $con;

public function __construct() {
    $this->con = mysqli_connect($this->db_host, ... );
   ...
}

public function query($query) {
   return mysqli_query($this->con,$query);
}
}

Now, I would like to use $db->query() within another class instance:

class display {

public function menu() {
this function creates a list based on a result of $db->query('SQL query')
}
plus various other functions to display different things, all using $db->query()

So what is the problem?

First, I got this working by adding 'global $db' to $disply->menu() but this is obviously a big NO NO and needs to be specified within each method.

It is probably clear now that I would like to use $db->query(SQL query) wherever and whenever I need an SQL result, not just within the global scope.

I spent the last couple of hours looking this up but to my surprise most people ask how to use something like $instance->instance->method in global.

Many thanks for your time.

Tom

Upvotes: 0

Views: 30

Answers (1)

ffflabs
ffflabs

Reputation: 17481

A simple solution is to inject the $db object when you instance your classes

class Display {

    protected $db;

    public function __construct($db) {
       $this->db = $db;
    }

    public function menu() {
        // here you can use $this->db as if it was the global $db;
    }
}

You need to add $db as a parameter everytime you instance your classes

$mydisplay = new Display($db);

There are other ways to achieve the same purpose. For example you can make the $db class a singleton, and add a static method to retrieve the instance from wherever you need. And there are more sophisticated ways such as using pimple to manage your dependency injections as a provider instead of doing it manually.

Upvotes: 2

Related Questions