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ö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