Klasse bzw Variable in Klasse Problem

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

  • Klasse bzw Variable in Klasse Problem

    Hey,

    ich habe ein Problem mit der Verwendung einer Klasse innerhalb einer Klasse.

    Ich habe eine Datei namens "common.php" welche meine klassen lädt. Diese Datei sieht so aus:
    PHP-Code:
    <?php
    // Fehlerreporting
    error_reporting(E_ALL);

    // Definition des Projektnamens
    define('PROJECT'"/gsadmin");

    // Für Verzweigungen, die aufs File Verzeichnis zeigen sollen
    define('DOCUMENT_ROOT'$_SERVER['DOCUMENT_ROOT'].PROJECT);

    // Für Web-Addresierung
    define('HTTP_ROOT'"http://".$_SERVER['HTTP_HOST'].PROJECT);

    // Datenbanksettings und weitere Systemweite Einstellungen
    require_once DOCUMENT_ROOT."/settings.php";

    // Settings Klasse einbinden
    require_once DOCUMENT_ROOT."/inc/classes/Settings/class.Settings.php";
    $Settings Settings::getInstance(DOCUMENT_ROOT."/inc/settings/settings.ini");

    // Alle Klassen einbinden 
    require_once DOCUMENT_ROOT."/inc/includeAllClasses.php";

    // Datenbank Objekt erstellen
    $DB = new DB();

    // global Verfügbares Sicherheitsfunktionen Objekt erstellen
    $SECURITY = new Security();

    // global verfügbares Session Objekt erstellen
    new SessionHandler();

    // global verfügbares BB-Code Objekt erstellen
    $BBCODE = new BBCode();
    ?>
    Jetzt möchte ich in meiner Datenbank Klasse auf die Settings Klasse zugreifen. Also z.b auf $Settings->dbServer . Wenn ich über meiner DB Klasse
    PHP-Code:
    echo $Settings->dbServer;
    die(); 
    einfüge funktioniert das auch, jedoch innerhalb der Klasse in einer Funktion, z.b Konstuktor bekomme ich die Notice:

    Undefined variable: Settings
    Skript: /opt/lampp/htdocs/gsadmin/inc/classes/DB/class.DBMySQL.php Line: 46

    Trying to get property of non-object
    Skript: /opt/lampp/htdocs/gsadmin/inc/classes/DB/class.DBMySQL.php Line: 46

    und die Variable wird nicht ausgegegen. Zeile 46 ist diese hier:
    PHP-Code:
    echo $Settings->dbServer
    Hier meine Datenbank Klasse:
    Das erste echo ... funktioniert, das zweite gibt dann die Notice und die Variable nicht mehr aus.
    PHP-Code:
    <?php
    echo $Settings->dbServer;
    echo 
    "<br />";

    class 
    DB
    {
        
    // Datenbankverbindungsobjekt
        
    public $MySQLiObj null;
        
        
    // Letzte SQL Abfrage
        
    public $lastSQLQuery null;
        
        
    // Status der letzen Abfrage
        
    public $lastSQLStatus null;
            
        
        public function 
    __construct()
        {
            
            echo 
    $Settings->dbServer;
            echo 
    "<br />";
            die();
            
            
            
            
    // Erstellen eines MySQLi- Objektes
            
    $this->MySQLiObj = new mysqli($Settings->dbServer$Settings->dbUser$Settings->dbPass$Settings->dbName);
            
            
    // Prüfen ob ein Fehler aufgetreten ist
            
    if(mysqli_connect_errno())
            {
                echo 
    "Keine Verbindung zur Datenbank m&ouml;glich.";
                
    trigger_error("MySQL-Connection-Error"E_USER_ERROR);
                die();
            }
        }
            
        public function 
    __destruct()
        {
            
    $this->MySQLiObj->close();
        }
        
        
        public function 
    query($sqlQuery$resultset false)
        {
            
    // Letzte SQL Abfrage aufzeichnen
            
    $this->lastSQLQuery $sqlQuery;
            
            
    // Hier kann später die  Protokoll Methode doLog() aktiviert werden
            //$this->doLog($sqlQuery);
            
            
    $result $this->MySQLiObj->query($sqlQuery);
            
            
    // Das Ergebnis als MySQL-Result plain zurückgeben
            
    if($resultset == true)
            {
                
    // Status setzen
                
    if ($result == false)
                {
                    
    $this->lastSQLStatus false;
                }
                else
                {
                    
    $this->lastSQLStatus true;
                }
                
                return 
    $result;
            }
            
    $return $this->makeArrayResult($result);
            
            return 
    $return;
        }
        
        
        public function 
    lastSQLError()
        {
            return 
    $this->MySQLiObj->error;
        }
        
        
        private function 
    makeArrayResult($ResultObj)
        {
            if (
    $ResultObj === false)
            {
                
    // Fehler trat auf, z.b Primärschlüssel schon vorhanden
                
    $this->lastSQLStatus false;
                return 
    false;
            }
            else
                if (
    $ResultObj === true)
                {
                    
    // UPDATE,- INSERT etc. es wird nur true zurückgegeben
                    
    $this->lastSQLStatus true;
                    return 
    true;
                }
                else
                    if (
    $ResultObj->num_rows == 0)
                    {
                        
    // Kein Ergebnis eines SELECT, SHOW, DESCRIBE oder EXPLAIN Statements
                        
    $this->lastSQLStatus true;
                        return array ();
                    }
                    else
                    {
                        
    $array = array ();
                        
                        while (
    $line $ResultObj->fetch_array(MYSQL_ASSOC))
                        {
                            
    // Alle Bezeichner in $line kleinschreiben
                            
    array_push($array$line);
                        }
                        
                        
    // Status der Abfrage setzen
                        
    $this->lastSQLStatus true;
                        
                        
    // Das Array sieht nun genauso aus, wie das Ergebnis von DBX
                        
    return $array;
                    }

                 }
    }
    Wie kann ich innerhalb der DB Klasse auch auf diese Variablen zugreifen?
    Hier das ganze mal "Live" zusehen

    Danke im Vorraus

  • #2
    PHP: Variable scope - Manual

    Du hast 3 Möglichkeiten:
    1. Übergib $Settings als Parameter an den Konstruktor.
    2. Verwende das Registry- oder Singleton-Pattern.
    3. Greife über $GLOBALS zu.

    Die letzte Möglichkeit habe ich nur der Vollständigkeit wegen erwähnt. Diese Methode ist verpönt.
    Wenn du noch an anderen Stellen, z.B. in anderen Klassen auf $Settings zugreifen mußt, dann verwende eines der erwähnten Pattern, vorzugsweise Registry.
    Wenn nicht, dann reiche die Variable als Parameter in die Funktion.

    Kommentar


    • #3
      Danke für deine Hilfe :-) . Ich habe mich für die 2te Möglichkeit entschieden und nun funktioniert alles. Vielen Dank!

      Kommentar

      Lädt...
      X