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:
die database.php
die globals:
und die start.php die eben eingebunden werden soll:
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:
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.
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]);
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");
}
}
}
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");
}
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.
Kommentar