Probléme avec la creation des classes

Eléphant du PHP | 86 Messages

08 oct. 2010, 16:11

Bonjour! :shock:
Je débute en programmation orienté sous php et j'aimerais savoir s'il existe un répertoire particulier ou il faut placer les fichier .class car j'arrive pas à créer mes objets

Eléphant du PHP | 314 Messages

08 oct. 2010, 16:19

Non tu les crées ou tu veux, et tu les inclus ;)
Cordialement,
Julien - http://laravel.fr/

Mammouth du PHP | 19672 Messages

08 oct. 2010, 16:55

Non tu les crées ou tu veux, et tu les inclus ;)
Je prends la liberté de rajouter quand même quelques détails.

La POO, c'est surtout avec un but pratique pour ne pas avoir à ré-écrire certains codes génériques qu'on retrouve souvent quelle que soit l'application en cours de développement. Avec le temps, on en arrive donc à se poser des questions sur l'architecture logicielle, comment répartir les fichiers, selon quels critères doit-on mettre tel ou tel fichier dans tel ou tel répertoire, comment les nommer, tant les fichiers que les répertoires d'ailleurs.

Donc, pour reprendre la réponse faite par AoSiX, tu crée les répertoires selon ton inspiration du moment, mais je t'encourage à réfléchir à cette question de portabilité. Imagine par exemple que des classes que tu écris devront pouvoir être réutilisées à l'avenir lorsque tu attaqueras un autre projet : il sera plus facile de copier un seul répertoire contenant toutes tes classes pour l'insérer dans l'architecture du futur projet que de devoir les récupérer ici et là à travers plein de répertoires.

En résumé, je suggère la création d'un répertoire « librairie » à la racine de ton projet, et dedans tu ne mettras QUE des classes génériques, pas de code spécifique à une application donnée. Il ne faudrait en effet pas devoir y faire un ménage quelconque lorsque tu voudras l'utiliser à nouveau dans une autre projet.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 86 Messages

08 oct. 2010, 18:42

Plus explicitement je m'explique.
J'ai installé mes serveurs(web et mysql) sous un redhat ayant une adresse statique 10.xx.xx.xx et dans le repertoire /var/www/html je place les fichiers de connexion à la base de donnée en me basant sur l'exemple suivant : posting.php?mode=reply&f=29&t=255490
C'est trois fichiers sont les suivants

Code : Tout sélectionner

<?php /* Fichier : SGBD.class.php elle nous permettra de nous connecter au serveur*/ class SGBD { var $SGBD_login; // Attribut du login du SGBD var $SGBD_password; // Attribut du password du SGBD var $SGBD_host; // Attribut de l'hôte du SGBD var $SGBD_base; // Attribut du nom de la base de données var $connect; // Attribut de connection var $requete; // Attribut de requête //------------------------------------------------------------------------------------------ // Définition du constructeur //------------------------------------------------------------------------------------------- function SGBD ($login, $password, $host, $base) { // Vérification des variables if (empty ($login) || empty ($host) || empty ($base)) { // Affichage du message d'erreur echo "<b>Erreur :</b> Une ou plusieurs variable(s) n'ont pas été renseigné."; exit; }else { // Initialisation des attributs $this->SGBD_login = $login; $this->SGBD_password = $password; $this->SGBD_host = $host; $this->SGBD_base = $base; } } } //----------------------------------------------------------------------------------------------------- // Definition de la fonction de connexion ///---------------------------------------------------------------------------------------------------- function connect() { // Connection à MySQL $connect = mysql_pconnect($this->SGBD_host, $this->SGBD_login, $this- >SGBD_password); // Vérification de la connection if(!$connect) { // Affichage du message d'erreur echo "<b>Erreur :</b> Connection à MySQL impossible."; exit; }// Connection à la base de données if (!mysql_select_db($this->SGBD_base, $connect)) { // Affichage du message d'erreur echo "<b>Erreur :</b> Connection à la base de données impossible."; exit; }// Initialisation de l'attribut de connection $this->connect = $connect; } //---------------------------------------------------------------------------------------------------- //Fonction permettant d'executer des requetes //---------------------------------------------------------------------------------------------------- function requete ($requete) { // Exécution de la requête $result = mysql_query($requete, $this->connect); // Vérification de la requête if (!$result) { // Affichage du message d'erreur echo "<b>Erreur :</b> Impossible d'effectuer la requête au serveur."; exit; }else { // Initialisation de l'attribut de requête $this->requete = $result; } } //----------------------------------------------------------------------------------------------------------- //Fonction de deconnexion //----------------------------------------------------------------------------------------------------------- function deconnect() { // Déconnection de la base de données mysql_close($this->connect); } ?>

Code : Tout sélectionner

<?php //-------------------------------------------------------------------------------- //---Fichier : MySQL.SGBD.class.php Création de la classe fille //-------------------------------------------------------------------------------- class MySQL extends SGBD { // Méthode connect() function connect() { // Connection à MySQL $connect = mysql_pconnect ($this->SGBD_host, $this->SGBD_login, $this->SGBD_password); // Vérification de la connection if(!$connect) { // Affichage du message d'erreur echo "<b>Erreur :</b> Connection à MySQL impossible."; exit; } //Connection à la base de données if(!mysql_select_db($this->SGBD_base, $connect)) { // Affichage du message d'erreur echo "<b>Erreur :</b> Connection à la base de données impossible.";exit; } // Initialisation de l'attribut de connection $this->connect = $connect; } // Méthode requete() function requete ($requete){ // Exécution de la requête $result = mysql_query($requete, $this->connect); // Vérification de la requête if(!$result){ // Affichage du message d'erreur echo "<b>Erreur :</b> Impossible d'effectuer la requête au serveur."; exit; }else{ // Initialisation de l'attribut de requête $this->requete = $result; } } // Méthode deconnect() function deconnect(){ // Déconnection de la base de données mysql_close($this->connect); } } ?>

Code : Tout sélectionner

<html> <body> <?php echo phpversion(); /* Fichier : SGBD.php */ // Inclusion de la classe mère include ("SGBD.class.php"); /* Initialisation de la variable du SGBD correspondant */ $SQL = "MySQL"; // Inclusion de la classe fille du SGBD correspondant include ($SQL.".SGBD.class.php"); /* Création d'un nouvel objet de la classe fille + lancement du constructeur */ $database = new $SQL('root', 'zainroot', '10.16.3.92', 'test'); // Connection à la base de données $database->connect(); $database->requete("CREATE DATABASE newBase7"); // Déconnection de la base de données $database->deconnect(); ?> </body> </html>

Cependat la base de donnée n'est pas crée :roll: :roll:

j'utilise php 5.1.6
mysql 5.xx

Mammouth du PHP | 19672 Messages

08 oct. 2010, 18:51

Et tu n'as aucun message d'erreur ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 86 Messages

08 oct. 2010, 18:54

aucuns messages

ViPHP
ViPHP | 5462 Messages

08 oct. 2010, 18:54

t'es sur de ca : new $SQL ?

Eléphant du PHP | 86 Messages

08 oct. 2010, 18:56

Tu as autre chose à me proposer?

Mammouth du PHP | 19672 Messages

08 oct. 2010, 18:57

t'es sur de ca : new $SQL ?
Bien vu ça aussi, fais donc directement new MySQL() avec tes paramètres.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 86 Messages

08 oct. 2010, 18:58

je teste et je reviens deux second

Eléphant du PHP | 86 Messages

08 oct. 2010, 19:05

j'ai essayé ça

Code : Tout sélectionner

<html> <body> <?php echo phpversion(); /* Fichier : SGBD.php */ // Inclusion de la classe mère include ("SGBD.class.php"); /* Initialisation de la variable du SGBD correspondant */ //$SQL = "MySQL"; // Inclusion de la classe fille du SGBD correspondant include ($MySQL.".SGBD.class.php"); /* Création d'un nouvel objet de la classe fille + lancement du constructeur */ $database = new $MySQL('root', 'zainroot', '10.16.3.92', 'test'); // Connection à la base de données $database->connect(); $database->requete("CREATE DATABASE newBase7"); // Déconnection de la base de données $database->deconnect(); ?> </body> </html>

Mammouth du PHP | 19672 Messages

08 oct. 2010, 19:13

Et... ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 86 Messages

08 oct. 2010, 19:16

:shock: ca fonctionne toujours pas

ViPHP
ViPHP | 5462 Messages

08 oct. 2010, 19:24

:shock: ca fonctionne toujours pas
qu'est ce qui ne fonctionne pas ? t'as une erreur ? t'as les erreurs d'activées au moins ?

Eléphant du PHP | 86 Messages

08 oct. 2010, 19:26

Comment on les activent?