Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2010, 15h36   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 1
Points : 0
Points : 0
Par défaut Utilisation de deux classes ayant le même nom

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:
Citation:
"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

Ça 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 mieux : est que quelqu'un sait comment régler ce problème d'une meilleur façon ?


Pas facile comme problème ...
Oosoos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 17h40   #2
Rédacteur
 
Avatar de Halleck
 
Développeur PHP & Architecte logiciel
Inscription : mars 2003
Messages : 562
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loiret (Centre)

Informations professionnelles :
Activité : Développeur PHP & Architecte logiciel

Informations forums :
Inscription : mars 2003
Messages : 562
Points : 1 379
Points : 1 379
Bonjour et bienvenue sur le forum.

Effectivement, pas de namespace sans PHP 5... Je me suis déjà posé cette question, et d'après mes recherches :
- un "unset" d'une classe n'est pas possible nativement
- même en jouant avec l'autoload, ça ne va rien changer

les solutions que je te propose :
- ou bien : utiliser l'extension Runkit (il existe par exemple une méthode runkit_method_rename, peut-être existe t-il la même chose pour les classes ?)

- ou bien : réécrire à la volée le code PHP. Exemple vite fait, juste pour le principe :
Code :
1
2
3
4
5
6
7
8
9
$content = file_get_contents(nom de la classe);
$content = preg_replace('!ancienne classe!', 'nouveau nom de la classe', $content);
file_puts_content('fichier temporaire', $content);
require_once 'fichier temporaire');
unlink('fichier temporaire')
 
//
// Ce code est juste une idée, ce serait plus performant 
// en écrivant le fichier en Ram par exemple, et avec un cache
N'hésite pas à nous dire si tu as d'autres pistes
__________________
Zend PHP Certified Engineer
tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro
membre de l'AFUP (Association des Utilisateurs de PHP)
Halleck est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h19.


 
 
 
 
Partenaires

Hébergement Web