2010-06-25 3 views
4

J'essaie d'apprendre la programmation orientée objet plus clair en créant une classe de base de données en PHP.OO classe de base de données

C'est ce que j'ai en ce moment. J'obtiens une erreur à propos de $ mysqli étant une variable indéfinie lorsque j'essaie de l'appeler en utilisant $ db-> query();

Veuillez expliquer comment définir la variable $ mysqli définie.

<?php 

class phpDatabaseClass { 

public function __construct() 
{ 
    $mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname); 
} 

public function query() 
{ 
    $sql = 'select * from users'; 
    $results = $mysqli->query($sql); 

    if(($results->num_rows) > 0) 
    { 
    echo 'We have: '.$results->num_rows; 
    } 
} 

} 

?> 

Dans un autre fichier je suis instanciation de l'objet puis appeler une fonction comme ceci:

require 'phpDatabaseClass.php'; 
define('DBhost', 'localhost'); 
define('DBusername', 'root'); 
define('DBpassword', 'root'); 
define('DBname', 'campbellCustomCoatings'); 


$db = new phpDatabaseClass(); 
$db->query(); 

Répondre

2

Votre instance de mysqli devra être membre de votre classe, consultez ici ...

class phpDatabaseClass { 
private $mysqli; 
public function __construct() 
{ 
    $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname); 
} 

public function query() 
{ 
    $sql = 'select * from users'; 
    $results = $this->mysqli->query($sql); 

    if(($results->num_rows) > 0) 
    { 
    echo 'We have: '.$results->num_rows; 
    } 
} 

} 

Aussi, parce que vous apprenez, essayez l'extension de la classe PDO pour en savoir plus sur l'héritage.

De plus, légèrement tangentes, mais généralement les constantes sont nommées avec ALL_CAPS_WITH_UNDERSCORE_SEPARATORS.

De même, les éléments de base de données dans les définitions globales peuvent être risqués, car chaque élément de PHP peut y accéder. Je sais que WordPress le fait, mais croyez-moi que la qualité de son code est discutable. Sa popularité cependant, est sans aucun doute énorme.

+0

Je pensais que le but de la définition des constantes était de ne pas pouvoir être modifié. Êtes-vous en train de dire que c'est risqué parce qu'il peut être changé ou parce qu'il peut être vu par un utilisateur? Quelle serait la meilleure solution? – Catfish

+0

@Chatfish Seulement risqué car ils sont disponibles dans le monde entier. Voir aussi cette question http://stackoverflow.com/questions/593440/what-is-the-best-way-to-store-configuration-variables-in-php – alex

2

Le problème que je peux voir essaie de faire entre la fonction $mysqli persistent appels à l'intérieur même objet.

Ce qui doit être fait est d'avoir la variable stockée comme une variable d'instance, qui sont qualifiés par $this->[VARIABLE]:

<?php 

class phpDatabaseClass { 

public function __construct() 
{ 
    $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname); 
} 


public function query() 
{ 
    $sql = 'select * from users'; 
    $results = $this->mysqli->query($sql); 

    if(($results->num_rows) > 0) 
    { 
    echo 'We have: '.$results->num_rows; 
    } 
} 

} 

?> 

Je regardais en utilisant PDO.

+0

Vous devrez peut-être définir la propriété: P – alex

Questions connexes