Instance stopt met werken na include

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Pagina: 1 2 volgende »

Wout van der Vegt

Wout van der Vegt

02/12/2010 13:38:31
Quote Anchor link
Hallo,
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
 
PHP hulp

PHP hulp

26/11/2024 19:45:48
 
Erik Rijk

Erik Rijk

02/12/2010 13:48:15
Quote Anchor link
Heb je wat code?
Zo is het niet echt duidelijk wat je wilt.
 
Bas Cost Budde

Bas Cost Budde

02/12/2010 14:07:24
Quote Anchor link
als het al op regel 4 fout gaat: bestaat dat object wel, om te beginnen? Is dit een verse pagina?
 
Niels K

Niels K

02/12/2010 16:01:37
Quote Anchor link
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
 

02/12/2010 16:05:03
Quote Anchor link
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.
 
Wout van der Vegt

Wout van der Vegt

02/12/2010 17:58:09
Quote Anchor link
Ja natuurlijk heb ik hem gestart :P
 
Niels K

Niels K

02/12/2010 18:28:56
Quote Anchor link
lees mijn post nog eens ;-)
 

02/12/2010 18:38:35
Quote Anchor link
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.
 
Bas Cost Budde

Bas Cost Budde

02/12/2010 19:27:32
Quote Anchor link
Zoals Ivo meteen al zei: post eens wat code! Vooral die eerste vier regels, die interesseren me.
 
Wout van der Vegt

Wout van der Vegt

03/12/2010 09:58:40
Quote Anchor link
Ik zal het zo duidelijk mogelijk proberen uit te leggen. De output gaat namelijk eerst door een andere class die het daarna op het scherm print..

Dit is mijn index:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>

<!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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $cfg->SiteName." - ".$main->gettitle(); ?>
</title>
</head>
<body>
<div id="container">
<div id="header">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $cfg->HeaderText; var_dump($user); ?>

</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">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $main->laadpagina(); ?>

</div></div>
<div id="footer">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $cfg->FooterText." ".$user->ok; ?>

</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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// $user = new Auth();
// echo "Object?" . is_object($user);

echo "<br/>User ok?" . $user->ok . "<br/>";
if(isset($user -> ok)) echo ":)"; else echo ":(";
var_dump($user);

echo $user -> ok;
if($user->ok === TRUE) {
    echo "Ingelogd";
}
else{
    echo "Je bent niet ingelogd";
}

?>



Ik hoop dat ik het duidelijk heb uitgelegd, anders hoor ik het wel!
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 10:10:37
Quote Anchor link
weet je wel zeker dat $user wordt aangemaakt in de globale scope, en niet binnen een functie of methode, in localize?
 
Wout van der Vegt

Wout van der Vegt

03/12/2010 10:18:08
Quote Anchor link
$user is de instance, als je normaal gesproken var_dump($user); zou uitvoeren krijg je alle variabelen in de global scope. Als ik het goed heb.

En mijn localize ziet er zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 10:28:30
Quote Anchor link
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.
 
Wout van der Vegt

Wout van der Vegt

03/12/2010 10:39:13
Quote Anchor link
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?
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 10:40:30
Quote Anchor link
Even scherp zetten: bestaat $user wel in localize, en niet meer direct daarna in index? Zet er dan in localize eens
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
global $user;

voor
 
Wout van der Vegt

Wout van der Vegt

03/12/2010 10:43:34
Quote Anchor link
Oke gedaan, maar er veranderd niets..
In localize doet $user het wel.
In de index ook.
Behalve als ik in de index een bestand include wat $user opvraagt..
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 10:45:34
Quote Anchor link
... verderop dus?

Bestaat $user nog wel aan het eind van index.php?

Vertelt print_r(get_defined_vars()) je iets, in check.php
 
Wout van der Vegt

Wout van der Vegt

03/12/2010 10:59:21
Quote Anchor link
Check geeft op die functie array()
En even later in het script weer op index niveau geeft hij alle variabelen, inc de $user. Ingevuld en al
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 11:37:16
Quote Anchor link
okee, dus jouw omschrijving "de instance stopt met werken" keur ik af; het lijkt ernstig op een scope-probleem.

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?
 
Wout van der Vegt

Wout van der Vegt

03/12/2010 12:32:41
Quote Anchor link
Gewoon in de root, maar de class staat wel in een mapje.
 
Bas Cost Budde

Bas Cost Budde

03/12/2010 12:57:58
Quote Anchor link
ik bedoel: hoe ziet het stuk code eruit waarin je de include() hebt staan?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.