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:
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
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:
Hier meine Datenbank Klasse:
Das erste echo ... funktioniert, das zweite gibt dann die Notice und die Variable nicht mehr aus.
Wie kann ich innerhalb der DB Klasse auch auf diese Variablen zugreifen?
Hier das ganze mal "Live" zusehen
Danke im Vorraus
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();
?>
PHP-Code:
echo $Settings->dbServer;
die();
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;
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;
}
}
}
Hier das ganze mal "Live" zusehen
Danke im Vorraus
Kommentar