Il est préférable de déterminer les spécifications de l'objet lors de sa création et il semble que les spécifications de l'objet ne correspondent pas au modèle que vous avez choisi.
En règle générale, vous devez vous poser la question suivante : "Ai-je besoin d'une seule instance d'un objet (statique) ou de plusieurs ?".
Pour ce cas particulier (se connecter à une base de données et l'interroger), il n'est pas conseillé d'avoir un objet instancié pour l'objet base de données, à moins que vous ne deviez établir plusieurs connexions avec la ou les base(s) de données.
Vous avez donc un cas d'utilisation d'un objet instancié par rapport à un objet statique. Plusieurs connexions simultanées peuvent surcharger la base de données, en fonction de la configuration et du nombre de fois qu'une connexion est créée au cours d'une seule exécution.
C'est pourquoi il existe plusieurs modèles de conception OOP pour PHP afin de faciliter l'architecture des objets. Voir http://www.slideshare.net/RobertGonzalez/object-oriented-design-patterns-for-php-presentation pour une bonne présentation des modèles les plus courants.
Pour un exemple concret http://ideone.com/6qxvqx
Note J'ai renommé mysqli en mysqli2 et j'ai créé une fausse classe pour gérer les requêtes et j'ai ajouté un certain suivi à la connexion et à la création d'objets.
<?php
interface iDatabase
{
static public function execute();
public function instantiatedExecute();
}
abstract class database implements iDatabase
{
protected static $conn;
/**
* create an instance of database that uses the same connection across all instances
*/
final public function __construct()
{
self::connect();
}
/**
* Connect to a database if not already connected
*/
final protected static function connect()
{
if (null === self::$conn || false === (self::$conn instanceof mysqli)) {
self::$conn = new mysqli( /* DB info */ );
//add error checking here...
}
return self::$conn;
}
/**
* query database connection
*/
final public function query($query)
{
return self::doQuery($query);
}
/**
* static query database connection
*/
final public static function doQuery($query)
{
//sanitize query here if desired
return self::connect()->query($query);
}
}
class example extends database
{
/**
* example specific static execution
*/
public static function execute($query)
{
self::doQuery($query);
}
/**
* example specific non-static execution
*/
public function instantiatedExecute($query)
{
$this->query($query);
}
}