php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.11.2004, 19:36  
Gast
 
Beiträge: n/a
Standard Redeklarieren eine schon vorhandene Classe

Hallo,

ich habe ein Projekt in dem Objekte aus Klassen erstellt werden. Die Klassen werden je nach Bedarf dynamisch mit include eingebunden.

Jetzt kann es passieren das zwei klassen zwar verschieden sind, aber den selben Klassennamen benutzen (das kann ich leider nicht vermeiden!).
In diesem Fall bekommen ich beim Versuch die zweite Klasse einzubinden natür eine Fehlermeldung "Cannot redeclare class ...".

Meine Frage ist jetzt kann ich eine schon vorhandene Klasse wieder entfernen oder gibt es eine andere möglichkeit Klassen zu nutzen ohne das derren Namen in Konflikt stehen.

MfG Markus
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.11.2004, 19:42  
Gast
 
Beiträge: n/a
Standard Re: Redeklarieren eine schon vorhandene Classe

Zitat:
Zitat von conmafi
Jetzt kann es passieren das zwei klassen zwar verschieden sind, aber den selben Klassennamen benutzen (das kann ich leider nicht vermeiden!).
Wenn sich das nicht vermeiden lässt, dann hast du ein generelles Problem mit deiner Programmstruktur. Es macht keinen Sinn, zwei Klassen den selben Namen zu geben.

Gruß
phpfan
  Mit Zitat antworten
Alt 25.11.2004, 21:58  
Gast
 
Beiträge: n/a
Standard Re: Redeklarieren eine schon vorhandene Classe

Zitat:
Zitat von phpfan
Es macht keinen Sinn, zwei Klassen den selben Namen zu geben.
Das stimmt, nur es werden bei diesem Projekt von verschiedenen Leuten Module entwikelt. Der eine weiss ja auch nicht was der andere macht und aus diesem Grund ist es nicht zur vermeiden. Man könnte auch sagen das die Objekte um die es hier geht nicht als Klasse programmiert werden, was ist dann aber wenn jemand in seinem Script eine Funktion definiert und ein andere eine Funktion mit dem gleichen Namen definiert. Das Problemm währe zwar jetzt anderes aber immer noch ein Problemm.

Ich bin auf die Objektdefinition über eine Klasse ausgewichen weil hier jedes Objekt eigenen Namensraum hat, kann trotztdem auf Globale Variablen zugreiffen und über definierte Methoden angesprochen werden. Für diesen einsatz ist eine Klasse ideal.

Ich habe in der zwieschenzeit überlegt und folgendes vorgehen erarbeitet.

Kleines Vorabinfo:
- Objektdateien befinden sich in einem bestimmten Verzeichniß
- eine Objektdateie kann eine oder mehrere Klassen enthalten wobei jeder Klasse ein Objekt darstellt.
- In diesem Verzeichniß liegt noch eine Datei in der Informationen über vorhandene Klassen abgelegt sind

Ein Benutzer soll über den Browser ein Objekt auswählen. Bevor das Programm die Liste der vorhandene Objekte erstellt schaut es erst mal in dem Verzeichniß nach ob neue Dateien über die noch keine Informationen gesammelt wurden vorhanden sind. Sollte jetzt eine Datei die noch nicht bekant ist gefunden werden wird dieser zuerst überprüfft, vorhandene Klassennamen ggr. durch zufählig erstellte noch nicht vorhandene im Code ersätzt, jeder Klasse eine Id verpasst, und dann zusammen mit dem Klassennamen und dem Dateinamen in der Infodatei gespeichert wird, also Id, Neue Name, Dateiname. Jetzt wird der unter umständen geenderte Code wieder unter dem gleichen Namen gespeichert. Der Benutzer bekommt nur die Id der Klassen zur auswahl, was eine verwächslung ausschließt.

Wenn das Programm dann später das Objekt benutzen soll wird er die Datei in der die Klasse vorhanden ist anhand der Id in das Programm einbinden, das Objektdessen Klassenname nun in eine Variable vorhanden ist erstellen, und keine Konflikte mehr verursachen.

Es ist zwar nicht die feine Art, aber ich weiss es nicht anderes. Has vieleicht noch jemand eine Idee?

Gruß Markus
  Mit Zitat antworten
Alt 25.11.2004, 22:08  
Gast
 
Beiträge: n/a
Standard

Wie wärs mit klaren Namensvorgaben für die Leute, die was daran programmieren?
Bsp.:

Klaus programmiert ein Newsmodul.
er nennt es "news_kl".

Peter hat aber auch ein Newsmodul geschrieben, dass er eigentlich viel besser findet und auch einbindet.
Jetzt nennt er es "news_pe" und schon entsteht kein Namensproblem.

Muss man halt sehen, inwieweit das praktikabel ist oder nicht.

Weitere Möglichkeit:
Eine zentrale Seite, auf die alle Coder Zugriff haben.
Sobald ein Coder ein Modul beginnt muss er es zuerst in der Liste eintragen.
Hier ist dann auch der Klassenname einzutragen.
Ist dieser bereits vorhanden, macht die Seite entweder einen anderen Vorschlag, oder verlangt nach einem neuen Namen.
Anhand dieser Informationen darf dann auch nur derjenige eine Klasse mit dem Namen einbinden, der sie in diese Liste eingetragen (angemeldet) hat.
So haben die Coder leichter den Überblick, was es schon gibt und was nicht und außerdem besteht leicht die Möglichkeit sich einen Überblick über das gesamte Projekt zu verschaffen.
  Mit Zitat antworten
Alt 25.11.2004, 22:36  
Gast
 
Beiträge: n/a
Standard

Das alles habe ich mir auch schon überlegt, und es wird auch eine Seite geben die das ganze verwaltet, aber trotzt allen dem gibt es immer noch das Problemm wenn sich jemand nicht an die Vorgaben hält.
Das mit dem Anmelden ist ja auch so'ne Sache. Wenn jemand sagt ich entwikele mal ein Modul nur für mich, denkt vieleicht 'da muß ich mich ja nicht extra registrieren', dann kommt ein andere und will auch dieses Objekt haben, der wird ihm das natürlich nicht verweigern. Irgendwann ist es dann soweit das jemand zwei Objekte hat die einen Klassennamen benutzen. Der wird natürlich nicht zur dem Entwikler des Objektes mit eine Berschwerde gehen sondern zur mir. Ich hab dann ärger weil ein andere zwar mit guten Absichten was gemacht hat, das jedoch nicht nach den Vorgaben getan hat.
Wenn es ein Projekt währe in dem bei der Auslieferung alle Klassen bekant währen würde es nicht schwehr zu sagen wälche Namen benutzt werden sollen, hier ist es aber so das dieses Projekt von jedem erweitert werden kann, die erweiterungen dann wiederum weiter gegeben werden können und, und, und...

Gruß und Dank, Markus
  Mit Zitat antworten
Alt 26.11.2004, 20:04  
Gast
 
Beiträge: n/a
Standard

man kann noch so lange drum rum reden. fakt ist, dass man in php keine classe doppelt declarieren kann. wiedersprüche?

du kannst ja ein kleines debug system bauen, da wird dir class_exists() sicher helfen
  Mit Zitat antworten
Alt 26.11.2004, 23:29  
Gast
 
Beiträge: n/a
Standard

Hi,

Projektmanagment muss nun mal sein. Wenn es nicht funktioniert, dann sollte man entweder den Leuten in den aller wertesten treten, die sich nicht an Konventionen halten oder das ganze bleiben lassen. Wenn du deine Mannen (und Mädels) nicht im Griff hast (aus welchen Gründen auch immer, z.B. wenns nicht professionell gemacht wird), dann kannst du dir natürlich auch die Arbeit machen jede Klasse nachzuarbeiten. Viel Spaß dabei :wink:

Denke dir Namenskonventionen aus, an die sich jeder zu halten hat. Z.B. so, wie oben schon vorgeschlagen wurde (nur blöd wenn zwei Peters ein News-Modul entwickeln :wink Benutze also ein Namensmuster, bei dem kein Name doppelt vorkommen kann. Eine Klasse, die nicht deinen Konventionen entspricht, wird abgelehnt. Fertig.

Viele Grüße,

Agadir

PS: Was sind denn das für Klassennamen, die da verwendet werden? Das wirklich zwei Leute den gleichen Namen verwenden ist normaler Weise schon großer Zufall.
  Mit Zitat antworten
Alt 26.11.2004, 23:34  
Gast
 
Beiträge: n/a
Standard

Hatten wir schonmal was zu:
http://www.phpfriend.de/forum/viewtopic.php?t=24265
  Mit Zitat antworten
Alt 27.11.2004, 11:44  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

alle entwickler erhalten ein kürzel, z.b. mit drei buchstaben.

z.b. Ben ^^

das wird dann immer vor den klassennamen gehängt.
dann schreibst du dir ein script, welches durch alle dateien rennt und die klassennamen mit str_replace() ersetzt. und zwar genau nach den kriterien, die du ( bzw. der verwalter der klassen ) vorgibst.

fertig.

"es ist unvermeidlich" .. antwort: nein. ist es nicht. es ist einfach nur schlecht geplant.

grüße ben.
imported_Ben ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
In htaccess auf vorhandene Session kontrollieren Goreo PHP Tipps 2008 7 22.06.2008 21:47
[S]: Classe oder Script was Screenshots von ein Video macht Nico_Schubert PHP-Fortgeschrittene 2 01.03.2008 14:23
instanz einer classe (variable) notyyy PHP Tipps 2007 22 16.07.2007 00:17
php classe, für mich unerklärlicher fehler notyyy PHP Tipps 2007 10 15.07.2007 16:53
Bildergalerie - in vorhandene Datei einbetten Lia PHP Tipps 2007 10 19.02.2007 14:57
1 classe extendet 2 greenrover PHP-Fortgeschrittene 14 01.09.2006 13:16
Wesentliche unterschiede: funktion vs. classe eQuin PHP Tipps 2006 11 19.05.2006 02:46
Registrierung eines neuen Users über schon vorhandene PHP Tipps 2006 9 12.02.2006 15:27
Abfrageergebnis in vorhandene Tabellenspalte speichern Datenbanken 1 02.01.2006 13:15
Vorhandene DB einträge Checken xXx PHP Tipps 2005-2 2 02.10.2005 21:08
vorhandene Tabelle anzeigen lassen nieselfriem Datenbanken 5 31.03.2005 23:17
Vorhandene Daten (CSV-File) bearbeiten und wieder abspeicher PHP Tipps 2005 18 03.01.2005 12:05
bbcode - Classe PHP-Fortgeschrittene 4 18.09.2004 17:30
Vorhandene Daten nicht nochmal schreiben Tutti PHP Tipps 2004 3 02.09.2004 20:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php redeklarieren, php vorhande klasse entfernen, klasse redeklarieren php, php function redeklarieren, funktionen redaklariern, php vorhandene objekte, redeklarieren, include (\\) in php redeklarieren, variablen redeklarieren, zwei klassen programm den gleichen namen, zwei klassen in einem programm den gleichen namen, php klasse redeklarieren, php funktionen redeklarieren, php vorhandenes objekt nutzen, schon vohandenen beider, klasse redeklarieren, php alle vorhandenen klassen, php funktion redeklarieren, php klasse entfernen cannot redeclare, class redeklarieren php

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:59 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.