Fehler beim Objektzugriff innerhalb einer includeten Datei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehler beim Objektzugriff innerhalb einer includeten Datei

    Hallöchen

    Also, ich bastell seit kurzem ein wenig mit Klassen rum. Muss vorwarnen dass das was unten steht meine ersten Gehversuche sind. =) Nun habe ich eine Hauptdatei in der die Dateien mit den Klassen mit require eingebunden werden. Soweit so gut. In dieser Hauptdatei erzeuge ich ein neues Objekt. Danach will ich über eine extra Klasse eine andere Datei einbinden, was er auch macht. In dieser extradatei gibt es einen Zugriff auf eine Methode des Objektes in der Hauptdatei und da bringt er mir:

    Fatal error: Call to a member function on a non-object in /var/www/html/start.php on line 8

    Am besten ich poste erstmal den Code:

    Die Hauptdatei:

    PHP-Code:
    require_once("includes/database.php");
    require_once(
    "includes/globals.php");
    $database= new db();
    sites::setsite($_GET[site]); 
    die database.php

    PHP-Code:
     class db {

        var 
    $connect;
        var 
    $dbname="xyz";
        var 
    $host="localhost";
        var 
    $user="me";
        var 
    $password="";
        var 
    $results;
        var 
    $finresult=array();

        function 
    showerrors(){
            echo 
    "Fehler:".mysql_error()."-".mysql_errno();
        }


        function 
    db() {
            if (!
    $this->connect=mysql_connect($this->host,$this->user,$this->password))
            
    $this->showerrors();
            if (!
    mysql_select_db($this->dbname,$this->connect))
            
    $this->showerrors();
            return 
    $this->connect;
        }

        function 
    getdata($question) {
            if (!
    $this->results=mysql_query($question,$this->connect))
            
    $this->showerrors();
            
            return 
    $this->results;
        }


    die globals:
    PHP-Code:
     class sites{

        function 
    setsite($site) {
            switch (
    $site) {
                case 
    start:
                    require_once(
    "start.php");
                    break;
                case 
    map:
                    require_once(
    "map.php");
                    break;
                default:
                    require_once(
    "start.php");
                    }
                                        }

    und die start.php die eben eingebunden werden soll:
    PHP-Code:
    $blub=$database->getdata("SELECT * FROM users"); 

    Das witzige bei der ganzen angelegenheit ist, wenn ich die Datei direkt einbinde oder die switch Anweisung direkt in die Hauptdatei schreibe oder anders gesagt, nicht über eine Klasse oder Funktion die zusätzliche start.php einbinde funktioniert es, nur wenn ich sie eben über eine zusätzliche Funktion bzw. Klasse einbinde will er überhaupt nicht.
    Also in der Hauptdatei und ohne globals:

    PHP-Code:
    require_once("includes/database.php");
    require_once(
    "includes/globals.php");
    $database= new db();
            switch (
    $site) {
                case 
    start:
                    require(
    "start.php");
                    break;
                case 
    map:
                    require(
    "map.php");
                    break;
                default:
                    require(
    "start.php");
                        
            } 
    So hat er ohne probleme zugriff auf das Objekt $database und was in start.php steht wird ohne probs ausgeführt, nur eben wenn ich es wie oben über eine extra Klasse mache will er ganz und garnicht.
    Muss ich da vorher irgendwas als global setzen? Ich lese nun schon seit 3h alles mögliche und probiere hin und her, mir fällt nix mehr ein. Und ohne diese extra Klasse zum einbinden ist auch wieder Käse, weil wenn Klassen dann alles =)

    Ich danke schonmal für mögliche Antworten oder Denkanstöße.

  • #2
    Dreh mal dein error-reporting voll auf!

    Kommentar


    • #3
      globale Variabeln - $database - sind in Funktionen nicht bekannt. zu komplizierter Ansatz mit class sites.

      Kommentar


      • #4
        mit vollem errorreporting bringt er mir:

        Notice: Use of undefined constant site - assumed 'site' in /var/www/html/index.php on line 35

        Notice: Use of undefined constant start - assumed 'start' in /var/www/html/includes/globals.php on line 10

        beim ersten handelt es sich um
        PHP-Code:
        sites::setsite($_GET[site]); 
        beim 2ten um einen teil von switch:

        PHP-Code:
        case start
        Ich weiß nicht ob es daran liegen könnte weil er bindet die Seite ja ein und diese "Fehler" betreffen ja nur irgendwo den Teil wo die Seite eingebunden wird, aber das geht ja. Es scheint eben nur so als ob dann bei der eingebundenen seite, sofern sie über die Klasse eingunden wurde, das Objekt nicht mehr existiert.


        @muh: Kann ich jetzt nicht folgen. =) Im endeffekt funktioniert ja alles wenn ich nicht die Seite über die Klasse sites einbinde und da brauch $database auch nicht bekannt zu sein, denke ich....dachte ich bisher Weil diese Klasse solls ja nur einbinden und wenn das geschehen ist gibts ja nix mehr zu tun das $database irgendwie betrifft. Oder unterliege ich einem kompletten Denkfehler?

        Kommentar


        • #5
          Sieht denn das
          PHP-Code:
          sites::setsite($_GET['site']); 
          und das
          PHP-Code:
          case 'start'
          nicht besser aus ? Schau mal ins Manual zum ThemaString

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar

          Lädt...
          X