开发者

Php using one class in another class

开发者 https://www.devze.com 2023-01-26 14:58 出处:网络
I have a question about using my database class in other classes on my site. I only have need for one object of my database class and this is the instance that I want to run all my queries on.

I have a question about using my database class in other classes on my site. I only have need for one object of my database class and this is the instance that I want to run all my queries on.

I have a class called MysqliExtension which extends and adds some additional functionality to the mysqli class

I also have a class called Users which manages my users log ons/offs, fetches their info from the database etc. Finally, I have a file called config.php where I include these two classes and instantiate objects of the MysqliExtension and User classes.

config.php

require_once 'MysqliExtension.php';
require_once 'Users.php';

$database = new MysqliExtension(host,....);

I would like to get some opinions on the best way to pass my database object into my User object.

Option 1

In my config.php file

$user = new User($username,password);

in my Users.php file

    class User{


function myfunction(){

global $database;
$database->callDatabaseFunction();
return $some_result;
}

}

}

Option 2

In my config.php file

$user = new User($username,password,$database);

in my Users.php file

class User{

function __construct($username,$password,$database){    
$this->database = $database;
    }

function myfunction(){

$this->database->callDatabaseFunction();
return $some_result;
}

}

}

Which way is the best, or are they pretty much the same? Is there 开发者_如何学JAVAa different way all toghether that I haven't thought of?


If you only need one instance of a class : http://en.wikipedia.org/wiki/Singleton_pattern

Usage examples (using the PHP example in the refered link) :

$instance = Singleton::getInstance();

// or

Singleton::getInstance()->somefunction();

Note that this method only allows one instance of the object, so if you need to use more than one (let's say to have 2 connections to diferent databases), it's preferable not to use it.


I prefer the first way. It makes more sense to have the database logic completely separate from the user logic. However, if you make the functions public you can do something like this:

$user_results = database::callDatabaseFunction()

without having to instantiate the object.

0

精彩评论

暂无评论...
验证码 换一张
取 消