Problème de classe php

Petit nouveau ! | 4 Messages

06 mai 2009, 23:34

Bonsoir. je ne m'y connais pas trop en POO mais je suis confronté à un problème plutot 'merdique'
Donc voila :

J'ai crée une classe nommée bd_connec et enregistrée seule dans un fichier bd_connec.php
qui définit des méthode de connxexion et deconnexion à une base de donnée dans les infos figurent dans un fichier config.php

Description du fichier config.php
<?php
//info base de donnée
define('bd_serveur', 'localhost');
define('bd_login', 'jocker');
define('bd_pass', '123456');
define('bd_nom', 'sopsi');
define('contact_email', '[email protected]');

?>


Description du fichier bd_connec.php
<?php

include "../config.php";
class bd_connec{

	//fonction qui permet de se connecter à la base de donnée dont les infos figurent dans le fichier config.php
	function seconnecter()
	{
		$mysql = mysql_connect( bd_serveur, bd_login, bd_pass );
		mysql_select_db(bd_nom, $mysql);
		return $mysql;
	}
	
	//permet de se déconnecter de la base de donnée après une connexion 
	function sedeconnecter($mysql)
	{
		mysql_close($mysql);
	}
}
?>

Ensuite j'ai créé deux autre classes administrateur et categorie sachant que chacune d'elles attaque une table différente de la bd.

Description de la classe administrateur.php
<?php
include "bd_connec.php";
class administrateur extends bd_connec
{
	function supprimer_admin($id_admin)
	{
		$sql="DELETE FROM administrateur WHERE id_admin='$id_admin' ";
		$id=$this->seconnecter();
		mysql_query($sql);
		$this->sedeconnecter($id);
	}
}
?>






Description de la classe categorie.php

<?php
include "bd_connec.php";
class categorie extends bd_connec
{
        function supprimer_categorie($id_categorie)
	{
		$sql="DELETE FROM categorie WHERE id_categorie='$id_categorie' ";
		$id=$this->seconnecter();
		mysql_query($sql);
		$this->sedeconnecter($id);
	}
}
?>


Dans une derniere page test.php j'appelle une instance d'administrateur et une autre de categorie


Description de test.php

<?php
$categorie= new categorie();
$admin= new administrateur();

echo 'initialisation des objets effectuée' ;
?>

Quand j'exécute cela m'affiche un message d'erreur


Fatal error: Cannot redeclare class bd_connec in D:\wamp\www\sfe\classes\bd_connec.php on line 4


S'il vous plait comment dois-je procéder sans avoir à changer la structure c'est a dire en ayant le même nombre de classe et le même nombre de fichiers .
Merciiii et bonne soirée

ViPHP
ViPHP | 3300 Messages

06 mai 2009, 23:53

remplaces tous tes includes par des require_once

différence entre include et require:

require produit une fatal error si le fichier n'est pas à l'endroit ou on lui dit d'aller voir
et require_once fera que tu ne pourras pas inclure deux fois le même fichier

et voila

penses à spécifier les path en les précedant d'un dirname(__FILE__) . '/' pour éviter qu'en incluant un fichier qui inclue un fichier tu te retrouves avec un path différent, les path absolus sont généralement mieux que les relatifs en php d'ailleurs.
Fait du php depuis que ca existe ou presque :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 mai 2009, 23:56

Ce problème est dû à l'inclusion d'un fichier plusieurs fois. Pour palier aux erreurs de redéclaration dues à ça utilise plutôt l'instruction include_once au lieu de include.

Pour plus d'infos voir : http://www.apc.univ-paris7.fr/~revenu/D ... -once.html

On peut aussi utiliser la fonction class_exists() pour éviter de redéclarer une classe plusieurs fois.
Voir: http://fr2.php.net/class_exists
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
ViPHP | 4674 Messages

07 mai 2009, 10:57

Hey :-),

Attention, car les fonctions _once (typiquement, include_once et require_once) sont lentes. Si on veut comprendre pourquoi, il faut se pencher sur la fonction stat() de PHP, qui fait un appel stat en C. Les informations sont longues à obtenir (c'est toujours les accès disque qui font ralentir les applications — dans notre cadre de travail —). Même si PHP a un cache pour les appels stat (avec remise à zéro possible via la fonction clearstatcache()), les premiers appels sont longs.

Je conseille donc l'utilisation d'une fonction qui utilise require_once mais de façon intelligente, i.e. on utilise notre propre système de cache. C'est plus rapide que si on laisse PHP tout gérer lui-même, surtout si on a beaucoup de fichiers (sinon, c'est négligeable j'imagine).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).