Instance stopt met werken na include
Ik krijg deze fout als ik iets uit een variable van een instance wil halen:
Notice: Undefined variable: user in G:\Xampp\xampp\htdocs\isla\check.php on line 4
Notice: Trying to get property of non-object in G:\Xampp\xampp\htdocs\isla\check.php on line 4
De instance roep ik eerst aan en daarna include ik een bestand, in dat bestand staat de volgende code:
echo "<br/>User ok?" . $user->ok . "<br/>";
Hoe kan het dat de instance stopt met werken?
Wout
Zo is het niet echt duidelijk wat je wilt.
als het al op regel 4 fout gaat: bestaat dat object wel, om te beginnen? Is dit een verse pagina?
Quote:
De instance roep ik eerst aan en daarna include ik een bestand
Wat je precies bedoeld weet ik niet. Maar hoe kan je een instantie maken van een object terwijl deze niet bekend is? Of te wel, include eerst alle benodigde bestanden en maak dan een (nieuwe) instantie van het object
Bas Cost Budde op 02/12/2010 14:07:24:
als het al op regel 4 fout gaat: bestaat dat object wel, om te beginnen? Is dit een verse pagina?
Volgens mij moet er idd ergens effe new worden gebruikt.
Ja natuurlijk heb ik hem gestart :P
lees mijn post nog eens ;-)
Wout van der Vegt op 02/12/2010 17:58:09:
Ja natuurlijk heb ik hem gestart :P
Naja, php geeft aan dat hij de variabele $user niet kent. En je geeft dat zelf ook niet aan in je code. Dus leek het mij niet het geval dat je het gestart had.
Zoals Ivo meteen al zei: post eens wat code! Vooral die eerste vier regels, die interesseren me.
Dit is mijn index:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ob_start ();
include ("core/localize.php"); // Bestanden laden en starten
?>
error_reporting(E_ALL);
ini_set('display_errors', '1');
ob_start ();
include ("core/localize.php"); // Bestanden laden en starten
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional-dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title></title>
</head>
<body>
<div id="container">
<div id="header">
</div>
<div id="navigation">
Home | Inloggen | Uitloggen
</div>
<!-- not rendering the sidebar-a div will cause the content div to fill the space left by the sidebar-a div -->
<div id="sidebar-right">
Gebruikers online: 347 <br />
Beesten geruild: <br />
Showdowns:
</div>
<!-- not rendering the sidebar-b div will cause the content div to fill the space left by the sidebar-b div -->
<div id="sidebar-left">
Beest van de dag:
</div>
<div id="content"><div id="content-inner">
</div></div>
<div id="footer">
</div>
</div>
</body>
</html>
Hierin include ik het bestand localize.php. Deze __autoload() mijn classes, en maakt een nieuwe instance aan van alles wat ik nodig heb uiteraard. Verderop in de header staat een var_dump($user), deze werkt en geeft de volgende waardes terug: object(Auth)#7 (6) { ["user_id"]=> int(0) ["username"]=> string(4) "Gast" ["password"]=> NULL ["ok"]=> bool(false) ["salt"]=> string(8) "34asdf34" ["domain"]=> string(9) "localhost" }
Hieruit blijkt dat de _constructor van mijn instance is uitgevoerd en dat de variabelen zijn gezet. Het werkt dus.
Later in het bestand, in de content div, echo ik de source van een pagina, in dit geval check.php. Maar als ik in check.php, var_dump($user) uitvoer krijg ik Notice: Undefined variable: user in G:\Xampp\xampp\htdocs\isla\check.php on line 6
Dit duidt erop dat de instance stopt met werken, maar alles wat ik uitvoer is mogelijk in php en nergens zie ik een fout..
Dit is check.php, met wat extra controles:
Code (php)
Ik hoop dat ik het duidelijk heb uitgelegd, anders hoor ik het wel!
weet je wel zeker dat $user wordt aangemaakt in de globale scope, en niet binnen een functie of methode, in localize?
En mijn localize ziet er zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function __autoload($class_name) { // Classes includen.
include_once "core/" . $class_name . ".class.php";
}
$main = new Main(); // Hoofd script laden
$cfg = new Config(); // Config laden
$user = new Auth(); // Gebruikers class laden
?>
function __autoload($class_name) { // Classes includen.
include_once "core/" . $class_name . ".class.php";
}
$main = new Main(); // Hoofd script laden
$cfg = new Config(); // Config laden
$user = new Auth(); // Gebruikers class laden
?>
outputbuffering nog even uitstellen; dump je $user-object eens in je index, na de regel waarin je localize includet; onderzoek de rest van de code of ergens unset($user) verstopt staat.
Gedaan, dat is het vage. Bovenin de index (zie in de header) dumpt hij alles wel. Ook is er nergens een unset of een "" te vinden. hij unset de variabele als ik de pagina include? Dit is toch niet normaal?
In localize doet $user het wel.
In de index ook.
Behalve als ik in de index een bestand include wat $user opvraagt..
Bestaat $user nog wel aan het eind van index.php?
Vertelt print_r(get_defined_vars()) je iets, in check.php
En even later in het script weer op index niveau geeft hij alle variabelen, inc de $user. Ingevuld en al
Citaat uit het handboek:
When a file is included, the code it contains inherits the variable scope of the line on which the include occurs.
Waar bevindt zich die include van jou aan check.php?
Gewoon in de root, maar de class staat wel in een mapje.
ik bedoel: hoe ziet het stuk code eruit waarin je de include() hebt staan?