[POO] Problème de classe : Variables empty ?
Bonjour je me présente au passage je suis Stéphane, étudiant en BTS Informatique de Gestion option Developpeur d'Application.
Je suis codeur C# au départ mais là je m'improvise codeur PHP pour mon stage.
Je travaille actuellement en PHP 5, je retraduirais mon code en PHP 4 pour des raisons internes à l'entreprise.
J'essaye actuellement d'aborder les classes en PHP. J'ai souvent des problèmes dues à des propriétés dans mes classes dites empty.
Je ne comprend pas puisque mon constructeur affecte toutes les propriétés.
Ci dessous je vous montre mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| /*******************************************
********************************************
********************************************
Cette classe est appellé par une autre classe par le biais d'un héritage.
********************************************
********************************************
*******************************************/
class mysql_fac_info
{
protected $db_srv;
protected $db_port;
protected $db_login;
protected $db_password;
protected $db_name;
protected function mysql_fac_info($chosen_db)
{
// Début
switch ($chosen_db)
{
// Paramètres de connexion 1
case "lyo" : $db_srv="";/*$lyo_db_srv =*/
$db_port="";/*$lyo_db_port =*/
$db_login="";/*$lyo_db_login =*/
$db_password="";/*$lyo_db_password=*/
$db_name="";break;/*$lyo_db_name =*/
// Paramètres de connexion 2
case "crm" : $db_srv="";/*$crm_db_srv =*/
$db_port="";/*$crm_db_port =*/
$db_login="";/*$crm_db_login =*/
$db_password="";/*$crm_db_password =*/
$db_name="";break;/*$crm_db_name =*/
// Paramètres de connexion 3
case "fac" : $db_srv="localhost";/*$fac_db_srv =*/
$db_port="3306";/*$fac_db_port =*/
$db_login="root";/*$fac_db_login =*/
$db_password="";/*$fac_db_password =*/
$db_name="db_facturation_percallXV";break;/*$fac_db_name =*/
default : exit("Erreur de selection"); break;
}
// Fin
}
protected function connect($query)
{
mysql_connect($db_srv.":".$db_port,$db_login,$db_password)
or die (mysql_error());
mysql_select_db($db_name)
or die (mysql_error());
$result=mysql_query($query)
or die (mysql_error());
mysql_close();
$result2 = mysql_fetch_array($result);
return ($result2);
}
}
class mysql extends mysql_fac_info
{
// Propriétés
private $requete;
// Méthodes
// Constructeurs
public function mysql($chosen_db, $request)
{
// Début
$this->mysql_fac_info($chosen_db);
$requete=$this->list_of_request($request);
// Fin
}
// Autres Méthodes
protected function list_of_request($request)
{
switch ($request)
{
case "can_login" : $requete = 'SELECT * FROM * WHERE';break;
case "can_access_panel" : $requete = 'SELECT * FROM * *, * * WHERE *=* AND * = (
SELECT * FROM * WHERE * =*")';break;
default : exit; break;
}
}
public function username_login($username,$password)
{
// Début
$requete=$requete.' users_name="'.$username.'" users_password"'.$password.'"';
return($this->connect($requete));
// Fin
}
public function return_query()
{
// Début
$result=$this->connect($this->$requete);
$final_result = mysql_fetch_array($result);
return ($final_result);
// Fin
}
} |
Voici les différents messages d'erreurs que j'ai obtenu :
Citation:
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\Program Files\xampp\htdocs\dossier\admin\mysql_fac_info.php on line 51
Access denied for user 'ODBC'@'localhost' (using password: NO)
Le message ci dessous apparait après l'utilisation du pointeur "$this->"
Citation:
Fatal error: Cannot access empty property in C:\Program Files\xampp\htdocs\dossier\admin\mysql_fac_info.php on line 39
Comme vous l'avez compris cette classe est appellé lors d'un héritage.
La première classe assure la connexion à trois bases de données différentes, la deuxième classe assure toute la gestion des requêtes.
Dites moi si je me trompe, mais puisque je fais hériter une classe à une autre je devrais avoir tous les accès que je souhaite sur elle y compris les valeurs contenues dans les propriétés.
Cependant bien que mon constructeur dans cette classe mysql_info affecte les différentes informations aux variables, je ne peux avoir accès à celles ci dès que je lance ma méthode connect(), on dirait presque que mon constructeur n'affecte en fait aucune variable.
Si il y a une notion que je n'ai pas compris, dites le moi car là j'avoue je sèche.
Merci à vous d'avance ;)
En espérant vous avoir donné toutes les informations que vous souhaitez.