Page 1 sur 1

Utilisation de deux classes ayant le même nom

Posté : 29 déc. 2010, 16:52
par Oos
Bonjour,

Je présente mon problème :
j'ai deux applications en PHP qui définissent chacune leurs propres classes. Certaines de ces classes ont le même nom.
Par exemple :
- application1 a une classe Projet
- application2 a une classe Projet

donc deux classes différentes pour un seul nom.


Mon problème : je dois utiliser des classes d'une application dans la 2e. Mais comme les noms sont le même cela cause des conflits (erreur : "PHP Fatal error: Cannot redeclare class Project ...") quand je fais un include() dans une application vers une autre.
En sachant que je ne peux pas modifier le nom des classes.

Le meilleur moyen de gérer ce problème serait d'utiliser des namespaces je pense. Malheureusement, j'ai comme contrainte d'utiliser PHP 5.2 et les namespaces n'apparaissent qu'à partir de PHP 5.3 il me semble.


La seule autre solution que je vois c'est :
- utiliser la classe Projet de l'application 1
- dé-définir la classe Projet (un genre de "unset Projet)
- faire un include sur la 2e classe Projet
- utiliser la 2e classe

Ca serait très moche, mais sur le principe ça pourrait fonctionner.

D'où ma question : est que quelqu'un sait comme je pourrais faire pour "dé-définir" une classe en PHP ?
Ou encore mieu : est que quelqu'un sait comment régler ce problème d'une meilleur façon ?


Pas facile comme problème ...

Re: Utilisation de deux classes ayant le même nom

Posté : 29 déc. 2010, 18:05
par moogli
salut,

question subsidiaire : les classes sont identiques ?

si oui tu peut utiliser l'autoload pour le gérer par exemple http://www.php.net/manual/fr/language.o ... .php#84853

je n'ai pas encore trouvé s'il existe un "unregister" pour les classes !

@+

Re: Utilisation de deux classes ayant le même nom

Posté : 29 déc. 2010, 18:30
par Oos
Les deux classes ne sont pas identiques. Et je voudrais pouvoir utiliser les deux, c'est ça le problème : elles ont le même nom et ça cause des conflits.

Re: Utilisation de deux classes ayant le même nom

Posté : 29 déc. 2010, 19:50
par stealth35
il faut utiliser les namespace a l'ancienne, Projet1_MaClass, Projet2_MaClass

Re: Utilisation de deux classes ayant le même nom

Posté : 30 déc. 2010, 20:58
par CMBP_Xavier
Bonjour,

pourquoi utiliser les namespaces "à l'ancienne" (i.e. concaténation de suffixe, ce qui rend le code moins réutilisable...surtout si l'on veut utiliser des librairies tierces !) alors que les espaces de noms sont implémentés et fonctionnels en PHP (5.3) ?

Exemple :
<?php
//fichier bilblio_cmbp.lib.php
namespace BDPhilia{
class Connexion { /* ... */ }
}
namespace CMBP{

class Connexion { /* ... */ }
}
?>
Puis dans les fichiers d'implémentation:
<?php
require(' bilblio_cmbp.lib.php');
$test = new BDPhilia\Connexion();
$test2 = new CMBP\Connexion();
?>
Bien cordialement,

Xavier

Re: Utilisation de deux classes ayant le même nom

Posté : 30 déc. 2010, 21:22
par xTG
pourquoi utiliser les namespaces "à l'ancienne" (i.e. concaténation de suffixe, ce qui rend le code moins réutilisable...surtout si l'on veut utiliser des librairies tierces !) alors que les espaces de noms sont implémentés et fonctionnels en PHP (5.3) ?
Parce qu'il a comme contrainte d'utiliser PHP 5.2 :)

Re: Utilisation de deux classes ayant le même nom

Posté : 30 déc. 2010, 22:16
par CMBP_Xavier
Oups !

désolé, ça m'apprendra à mieux lire l'énoncé :?

Bien cordialement,

Xavier

Re: Utilisation de deux classes ayant le même nom

Posté : 05 janv. 2011, 18:32
par Mazarini
Bonjour,

En partant sur le principe des namespace "à l'ancienne", tu peux renommer tes 2 classes et faire dans chaque application une classe projet vide qui hérite de la bonne classe. Après tu utilises l'autre classe directement avec le nouveau nom.

le nom de classe "projet" conservé pour chaque application
1 seule source pour chaque classe projet

Re: Utilisation de deux classes ayant le même nom

Posté : 11 janv. 2011, 07:13
par Lirio
(un genre de "unset Projet)
Faire un unset pour les classes est malheureusement impossible.
En partant sur le principe des namespace "à l'ancienne",
La meilleurs solution est forcement les namespace à l'ancienne, mais il me semble que l'auteur ne veut pas modifier le nom de ses classes...

Re: Utilisation de deux classes ayant le même nom

Posté : 11 janv. 2011, 12:40
par stealth35
va falloir faire des concessions :wink: