redeclare class
Jens
- php
0 Tobias Kloth0 Jens0 Severin Kacianka0 Jens0 Sven Rautenberg0 Jens
Moin Moin
in PHP erstellt man ja mit
class Irgendwas {
}
eine Klasse, nur wie "killt" man diese wieder ?
unset tut es leider nicht.
es geht darum das ich in einer global.php eine weitere klasse per require einbinde, diese klasse aber in einigen seiten welche auch die global.php nutzen auch eingebunden wird was zum fehler:
Fatal error: Cannot redeclare class ......
führt. die zu includende datei kann ich nicht einfach kopieren und dann der class einen anderen namen geben (das wär dann zwar einfach aber lizenztechnisch nicht OK)
jetzt suche ich halt ne möglichkeit eine Klasse zurückzusetzen.
Hallo Jens,
es geht darum das ich in einer global.php eine weitere klasse per require einbinde,
versuch mal nicht require, sondern require_once zu verwenden.
Grüße aus Nürnberg
Tobias
Hallo Jens,
es geht darum das ich in einer global.php eine weitere klasse per require einbinde,
versuch mal nicht require, sondern require_once zu verwenden.Grüße aus Nürnberg
Tobias
Das hab eich auch schon versucht, also mit require_once
bringt aber nichts da in einer anderen datei die datei mit der class per require eingebunden wird und an diesen dateien möchte ich nichts ändern, geht im endeffekt um die erweiterung einer boardsoftware
bei goolge hab eich leider auch noch nichts gefunden und nach jetzt ca 5 stunden suche platzt mir fast der kopf :(
eine konstante kann man nicht zurücksetzen oder ändern, aber das das bei klassen nicht geht das habe ich nirgends gefunden :(
Hallo,
Das hab eich auch schon versucht, also mit require_once
bringt aber nichts da in einer anderen datei die datei mit der class per require eingebunden wird und an diesen dateien möchte ich nichts ändern, geht im endeffekt um die erweiterung einer boardsoftware
Wieso erweiterst du denn nicht einfach die Klasse?
http://www.php.net/manual/en/keyword.extends.php
gruß,
Severin
Hallo,
Das hab eich auch schon versucht, also mit require_once
bringt aber nichts da in einer anderen datei die datei mit der class per require eingebunden wird und an diesen dateien möchte ich nichts ändern, geht im endeffekt um die erweiterung einer boardsoftwareWieso erweiterst du denn nicht einfach die Klasse?
http://www.php.net/manual/en/keyword.extends.phpgruß,
Severin
OK ich versuche es mal nochmal neu zu erklären, ich bin dabei eine erweiterung für eine boardsoftware zu erstellen, d.h. ich möchte in den orginaldateien nicht drinn rumfummeln bzw diese auch nicht kopieren und unter neuen namen mit anderen namen für die class speichern
Das Board hat eine global.php welche die wichtigen Funktionen wie sessions usw handelt, nun möchte ich boardweit z.b. die User anzeigen die online sind, dazu benötige ich die class dafür welche in einer anderen datei ist.
diese binde ich per require ein, soweit sogut, nur auf der index.php gibt es diese funktion bereits orginal und dort wird auch diese externe class eingebunden was dann halt zu einem fehler führt
mein anliegen ist es jetzt in meiner datei die zur erweiterung der global.php dient nachdem ich per require die class eingebunden habe die claa wieder zu resetten denn sonst kommt der fehler.
in der datei die eingebunden werden soll möchte ich auch nicht drinn rumändern da sie auch an verschiedenen stellen im board verwendet wird.
hoffe das kam jetzt ein wenig besser rüber
Moin!
OK ich versuche es mal nochmal neu zu erklären, ich bin dabei eine erweiterung für eine boardsoftware zu erstellen, d.h. ich möchte in den orginaldateien nicht drinn rumfummeln bzw diese auch nicht kopieren und unter neuen namen mit anderen namen für die class speichern
Ist dein Vorhaben lizenztechnisch (du erwähntest, das das Board eine Lizenz hat, die offenbar nicht ganz so frei ist) überhaupt einwandfrei durchführbar? Das wäre mal an erster Stelle zu klären.
Und zweitens: Nein, eine einmal definierte Klasse kann man nicht löschen, weil es absolut unsinnig wäre, sowas zu ermöglichen. Wenn eine Klasse nicht existieren soll, dann bindet man deren Definition einfach nicht ein.
Ausführlich formuliert: Entweder baust du deine Erweiterungen des Boards direkt in den existierenden Originalcode ein. Dann tut die fragliche Klasse hinterher das, was von Original her vorgesehen war, plus das, was du geändert/hinzugefügt hast.
Oder du programmierst ausschließlich Erweiterungen außerhalb des existierenden Codes. Das bedeutet dann, dass du damit leben mußt, dich auch namensmäßig von allen existierenden Funktionen und Klassen fernzuhalten, weil diese schon vom Original benutzt werden. Es wäre programmtechnisch äußerst fragwürdig, wenn du die Klassen namensmäßig mischen würdest, weil man dann nicht mehr klar erkennen kann, welche Version der Klasse denn tatsächlich benutzt wird. Es kann also passieren, dass eine Originalkomponente gewöhnlich mit der Originalklasse arbeitet, und plötzlich deine Eigenbauklasse bekommt - und dann heftig Fehler auswirft, weil du nicht alle Methoden und Eigenschaften der Originalklasse implementiert hast.
Da du am Original ja nichts ändern willst, sollte es eigentlich kein Problem sein, einfach die existierenden Klassen des Originals zu erweitern - da ja auch nur deine neu hinzugefügten Module auf deine neuen Klassen zugreifen werden - am Original wolltest du ja nichts ändern.
Das Board hat eine global.php welche die wichtigen Funktionen wie sessions usw handelt, nun möchte ich boardweit z.b. die User anzeigen die online sind, dazu benötige ich die class dafür welche in einer anderen datei ist.
diese binde ich per require ein, soweit sogut, nur auf der index.php gibt es diese funktion bereits orginal und dort wird auch diese externe class eingebunden was dann halt zu einem fehler führt
mein anliegen ist es jetzt in meiner datei die zur erweiterung der global.php dient nachdem ich per require die class eingebunden habe die claa wieder zu resetten denn sonst kommt der fehler.
Geht nicht. Weil dein Vorgehen falsch ist.
include ('global.php'); (included 'classes.php' mit class 'klasse')
include ('deineklasse.php'); (implementiert class 'klasse' mit anderer Definition)
Sowas funktioniert nicht. Kann nicht funktionieren. Weil du ja nach erst nach der Einbindung von deineklasse.php programmtechnisch loslegst. Aber alle Einbindungen aus global.php, classes.php und deineklasse.php dann aktiv sein müssen, alle definierten Variablen, alle fefinierten Funktionen, alle definierten Klassen.
Angenommen, es gäbe eine Möglichkeit, die Klassendefinition zu löschen. Dann würde global.php sich auf die existierende Klasse aus classes.php verlassen - die ist aber gelöscht und durch die aus deineklasse.php ersetzt worden. Wenn du aber in deiner Klasse nicht alle benutzten Methoden und Eigenschaften anbietest, gibts Fehler.
Deshalb: Da ja sowieso nur die von dir geschriebenen Komponenten deine neuen Klassenmethoden benutzen können (das Original verläßt sich auf die Originalklasse, in der du nichts verändern wolltest), erweitere doch einfach die Originalklasse, sofern du es benötigst, und arbeite dann mit einem eigenen Klassennamen.
- Sven Rautenberg
Hi Sven
hast Du zufällig einen Bruder der Daniel heißt ?
Erstmal vielen Dank für die Hilfe, das war die Antwort die ich brauchte, also das es nicht geht.
Ich persönlich hätte keine Probleme damit den Code zu erweitern usw aber das ganze ist ja ein kostenloses addon und jede änderung duie ein user an seinem board dann machen muß ist eine fehlerquelle mehr, deswegen wollte ich es halt so einfach wie möglich lösen.
Ach ja die Klasse die ich nutzen wollte ist eine Orginal-Klasse vom Board ohne irgendwelche änderungen welche nur auf einer seite im board eingebunden wird und da kommt dann halt der fehler weil ich sie sagen wir mal im bereich des headers schon mal eingebunden hatte, naja egal.
Danke für die Ausführliche Info
Bye
Jens