[PHP]Variabelen verkrijgen door 'include' wil niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Topicstarter
Ik ben bezig met een CMS en toen ik toch bezig was ook met een Framework. Ik probeer hierbij een aantal lagen aan te leggen en het werkt ook wel, echter bepaalde log mechanismen niet.

Wat gebeurt er dan niet?
Wat ik bijvoorbeeld wil is het totaal aantal gebruikte Templates, aantal includes en aantal Queries weten. Dus als er bijvoorbeeld een template wordt geinitialiseerd dan, in mijn template class:
PHP:
1
$this->template_num++ ;
Allemaal koek en ei, en het werkt ook.

Aan het eind van elk bestand roep ik dan bijvoorbeeld
PHP:
1
$TemplateNum['editor'] = $template->getTemplateNum() ;

aan, en ik krijg het aantal gebruikte templates in dat bestand (in dit geval de E)ditor. Ik print hem nog in dezelfde file (for test purposes) en zie het aantal.

Echter dit werkt alleen met losse bestanden. Wat ik dus heb is een centraal bestand (index.php) waar alle classes en benodigde bestanden worden ge-include (dmv een class). Ik dacht dus: aan het eind van elk bestand zet ik het aantal Queries/Templates/Includes (zoals hierboven in een array), en in index.php array_sum ik de boel. Maar dat werkt dus niet. Ik krijg alleen de waardes bepaald in index.php zelf. Als ik de andere aanroep (bijv $TemplateNum['editor'] krijg ik een warning:
Notice: Undefined index: editor in E:\PHP Projects\CMS\index.php on line 60).

Dus in elk bestand zelf kan ik de waarde printen, maar als ik dat bestand include in een ander bestand niet meer.

Ik vind dit nogal vaag, want het volgende werkt wel (print: 1 35).
include-a.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

error_reporting(E_ALL) ;

$a[0] = 1 ;

include('include-a-2.php') ;

print $a[0] . " " . $a[1] ;

?>

include-a-2.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

error_reporting(E_ALL) ;

function argh() {
    return 35 ; 
}

$a[1] = argh() ;

?>


Iemand ideeen of ervaringen? Ik ga wel verder prutsen, maar het wil niet lukken na een paar uur.

[ Voor 14% gewijzigd door Cavorka op 10-08-2004 18:08 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je hebt dus een array, $TemplateNum, die niet overgenomen wordt op andere pagina's? Misschien als je hem op index.php declareert, daarna je includes doet en op elke pagina expliciet als global verklaart? Ik kan me een topic herinneren waar iemand ook dit probleem had, maar volgens mij is dat niet opgelost...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Topicstarter
NMe84 schreef op 10 augustus 2004 @ 18:20:
Je hebt dus een array, $TemplateNum, die niet overgenomen wordt op andere pagina's? Misschien als je hem op index.php declareert, daarna je includes doet en op elke pagina expliciet als global verklaart? Ik kan me een topic herinneren waar iemand ook dit probleem had, maar volgens mij is dat niet opgelost...
Indeed, ik heb een aantal array's die allemaal niet ge-array_summed kunnen worden: $QueryCount, $ParseTime, $IncludedFiles en $TemplateNum.

Is het mogelijk een variabele expliciet global te verklaren dan? Ik dacht alleen in functies. Maar ik zal het evengoed proberen en hier lezen.
------------------------------------------
Na die link doorgelezen te hebben, blijkt dus dat wanneer je een file include vanuit een functie, de variabelen de scope krijgen van die functie en niet de globale, oftewel (eerste note bij de link):
shevek at anarres dot org
05-Feb-2000 01:51

If you include a file from within a function using include(), the included file inherits the function scope as its own global scope, it will not be able to see top level globals unless they are explicit in the function.
PHP:
1
2
3
4
5
$foo = "bar";
function baz() {
   global $foo; # NOTE THIS
   include("qux");
}
Mijn excuses voor dit topique dan ook, want dit loste het (zo lijkt het tot nu toe tenminste) op.

[ Voor 41% gewijzigd door Cavorka op 10-08-2004 20:16 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.