Anzeige:
Ergebnis 1 bis 11 von 11

Thema: "cannot redeclare class" problem

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66

    "cannot redeclare class" problem

    hi...

    ich hab in meinem script eine funktion user_exists($uid) die prueft, ob der datensatz in der tabelle prefix_users mit der id $uid existiert und den bool dann zurueckgibt.... die funktion sieht exakt so aus wie die (funktionierende) site_exists($id) die sich nur im tabellennamen unterscheidet und im variablennamen also..

    PHP-Code:
    function user_exists($uid) {
        global 
    $db;
        return (
    $db->num("SELECT * FROM ".$myData['prefix']."_users WHERE id = '".$uid."'") == 1);

    der aufruf der methode $db->num bringt mir nun die fehlermeldung "cannot redeclare class in /bla/bla/bla/class.db.php line 2" line 2 enthaelt den normalen 'class name' aufruf...

    nach ein wenig googlen bin ich auf probleme beim requiren und includen gestoßen... die class.db.php wird tatsaechlich per require eingebunden also versuchte ich den vorgeschlagenen loesungsansatz anstatt require(), require_once() zu verwenden auf mein problem anzuwenden...

    als folge wird nun bemaengelt, dass die funktion clearglobal() (die erste funktion, in der, nach der class.db.php requireten, functions.php)
    not redeclared can

    also versuchte ich auch die _functions.php mit require_once() einzubinden, nun war ein seitenaufruf nicht mehr moeglich... sah aus wie eine endlosschleife.....

    tja soweit das problem - weiß jemand rat? wie gesagt ich habe bereits eine funktion site_exists() die genauso funktioniert nur halt inner anderen tabelle guckt, mit der der fehler nich auftritt....

  2. #2
    Registrierter Benutzer
    Registriert seit
    15.08.2003
    Beiträge
    79
    An deiner Stelle würde ich require_once() statt require() verwenden. Dass dadurch eine Endlosschleife entsteht, erscheint mir sehr unwahrscheinlich. Ich vermute, dass die Ursache für die Endlosschleife an einer anderen Stelle liegt.
    Ohne den Source-Code, ist es schwierig etwas genaueres zu sagen.

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66
    also vornweweg mal: die verwendung von require_once() hat sich bei mir noch nie als notwendig erwiesen, da ich alle dateien die per require eingebunden werden auch nur einmal einbinde, das weiß ich deswegen so genau, weil ich alle anderen dateien, die ich einbinde, mit include einbinde, theoretisch brauch ich also auch weiterhin kein require_once() zu verwenden (es sei denn, diese funktion bietet einen anderen vorteil - von dem ich noch nix weiß)...

    dass der fehler an anderer stelle liegt, vermutete ich schon, aber es is fuer mich ebensoschwer herauszufinden welche sourcetexte nun weiterhelfen...

    das problem ist wie gesagt, dass die funktion ausm letzten posting, bis auf den tabellennamen und vielleicht den namen der id variablen, voellig identisch zu anderen funktionierenden funktionen is...

    es bleibt noch zu erwaehnen, dass der fehler nur verursacht wird wenn die funktion true zurueckgibt.... wenn kein datensatz mit der id gefunden wird, kommt auch kein fehler, erst wenn einer vorhanden ist meldet er eine fehlfunktion... die anderen identischen funktionen verursachen unabhaengig vom rueckgabewert keinen fehler....

  4. #4
    Registrierter Benutzer
    Registriert seit
    15.08.2003
    Beiträge
    79
    The require_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the require() statement, with the only difference being that if the code from a file has already been included, it will not be included again.
    (Quelle: http://de.php.net/require_once)

    Das heisst, dass wenn du die Datei class.db.php (in der die Klasse db definiert ist) in irgendeiner anderen Datei (vielleicht functions.php) ebenso mit require() oder include() einbindest und diese dann zusammen mit class.db.php in deine php-Datei mit require() einbindest, es dann zu einer Fehlermeldung "cannot redeclare class db ..." kommt, weil die Klasse bereits über functions.php eingebunden ist. Die Klasse db wird mehrfach eingebunden. Das verursacht diese Fehlermeldung. Verwendest du anstatt require() require_once(), wird die Klasse, nicht nocheinmal eingebunden, wenn sie bereits über eine andere Datei eingebunden ist. require_once() bietet in der tat keinen anderen Vorteil (siehe http://de.php.net/require_once).

    ps: Da require_once() auch (fast) nichts anderes als require() macht, ist es meiner Meinung nach sehr unwahrscheinlich, dass sie eine Endlosschleife verursacht.
    Geändert von TrollSlayer (23-02-2005 um 19:12 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66
    nachdem ich dir erklaert hab, dass ich mich um die funktionsweise von require_once() erkundigt hab (was fuer ein zufall, ich nutzte die selbe quelle wie du und [jetzt halt dich fest] ich hatte sogar verstanden was sie aussagt) und festgestellt hab, dass ich es theoretisch nicht benoetige weil ich die dateien, die ich mit require einbinde NUR EINMAL einbinde, erklaerst du mir ein zweites mal die funktionsweise von require_once() und weist mich darauf hin, dass der fehler daher kommen kann wenn ich die class.db.php nochmals irgendwo einbinde....

    ich habe die class.db.php nirgends nochmals eingebunden.. nirgends und wenn ich nirgends schreibe dann heißt das nich, dass ich die datei irgendwo ein zweites mal eingebunden habe und das jetz nich mehr weiß sondern dann heißt das, dass ich die datei KEIN ZWEITES MAL eingebunden hab...

    is irgendwas an meinem code komisch oder an meiner sprache, dass ich hier fuer bloed gehalten werde?

    zum thema endlosschleife: ich sagte es sieht aus wie eine und nicht es ist eine.. das heißt die seite bleibt weiß aber sie laedt trotzdem noch und das passiert wenn ich sowohl die class.db mit require_once() einbinde als auch die funcionts
    Geändert von ohcibi (23-02-2005 um 19:27 Uhr)

  6. #6
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    @ohcibi:
    Anstatt dich über Ratschläge von Forenmitgliedern zu beschweren und Leute wegen ihrer guten Ratschläge anzupfeifen solltest du etwas mehr Code liefern.
    Kleiner Vorschlag - nur um deine Aussage zu verifizieren - auch auf die Gefahr hin, dass du mich auch für dumm hälst... schreib mal bitte ein
    echo "Datei eingebuden<br />";
    in deine class.db.php und sag mir wie oft diese Ausgabe kommt.


  7. #7
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66
    Zitat Zitat von Gaert
    Anstatt dich über Ratschläge von Forenmitgliedern zu beschweren und Leute wegen ihrer guten Ratschläge anzupfeifen solltest du etwas mehr Code liefern.
    ich fragte bereits welcher code denn hilfreich waere - die ganze class db, die methode num, die funktionierenden funktionen, was soll ich posten?

    Zitat Zitat von gaert
    ..., dass du mich auch für dumm hälst... schreib mal bitte ein
    echo "Datei eingebuden<br />";
    ich halte hier niemanden fuer dumm und das hab ich auch nich gesagt, ich verstehe bloß nich, warum man mir nich glaubt, dass ich die datei nur einmal eingebunden hab... ich HABE es ausprobiert nachdem ich es von dir gelesen hab, aber ich haette dir das ergebnis auch ohne nennen koennen.... natuerlich kam die ausgabe nur einmal, ich weiß doch wie oft ich das wort require schreibe, und nebenbei hab ich auch keine ahnung welchen nutzen es haben sollte, die datei zweimal einzubinden...

    außerdem haette im falle, dass ich die datei mehrmals eingebunden der fehler doch mit der verwendung von require_once() behoben worden sein muessen - und gleich im ersten posting schrieb ich, dass die verwendung dessen ZU EINEM WEITEREN FEHLER fuehrte

    demnach hab ich mich also nich beschwert, sondern genervt zum dritten mal den fehler beschrieben und in folge der dreifachen wiederholung gefragt ob man MICH fuer doof haelt bzw. wieso.....
    Geändert von ohcibi (23-02-2005 um 19:45 Uhr)

  8. #8
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Um auf deine Endlosschleife zurückzukommen....

    - Hast du Schleifenkonstrukte?
    - Arbeitest du mit Weiterleitungen über header("Location ...")?
    - Stehen diese in irgendeinem Zusammenhang mit dem Rückgabewerten deiner Funktion?


  9. #9
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66
    schleifen benutze ich ziemlich haeufig (wuesste gar nich wie das ohne funktionieren soll), weder in der class.db.php noch in der functions sind schleifen die ohne funktions oder methodenaufruf starten...

    ich benutzer kein header

    folglich steht es in keinem zusammenhang... den einzigsten zusammenhang den ich jetz erkennen koennte, is der, dass bestimmte anweisungsteile nur ausgefuehrt werden, wenn die betreffende funktion true zurueckgibt....

    aber wie gesagt, funktioniert das an anderer stelle, auf genau die selbe weise bereits bestens, ohne irgendwelche fehler....


    der begriffe endlosschleife floss durch meine finger weil die seite weiß bleibt und er weiter laedt, was also SO AUSSIEHT wie eine endlosschleife.... desweiten glaub ich nich an eine endlosschleife, weil der effekt erst eintritt wenn ich sowohl die class.db als auch die functions mit require_once() anstelle von require() einbinde....
    Geändert von ohcibi (24-02-2005 um 12:32 Uhr)

  10. #10
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Tja... ohne Kenntnis vom Code kann dir das Debuggen leider keiner hier abnehmen.
    Vorschlag: setze in regelmäßigen Abständen ein die() in dein Skript um die Stelle zu finden in der er in die "Endlosschleife" springt.


  11. #11
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66
    okay dann frag ich jetzt zum vierten mal welcher code euch denn hilfreich waere und kopiere einfach aus dem vorletzten posting

    Zitat Zitat von ohcibi
    ich fragte bereits welcher code denn hilfreich waere - die ganze class db, die methode num, die funktionierenden funktionen, was soll ich posten?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •