Gültigkeit von (Objekt-)Variablen über Dateigrenze hinweg bei include

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Gültigkeit von (Objekt-)Variablen über Dateigrenze hinweg bei include

    Hi,

    ich habe mich extra bei euch angemeldet, weil ich wegen eines Problems halb verrückt werde, und ich hoffe ihr könnte mir helfen :)

    Hier der StatusQuo:

    Ordnerstruktur auf dem Server:

    \
    \test1.php
    \config.php
    \bla\test2.php

    in der config.php steht:

    PHP-Quellcode

    1. <?php
    2. $var = 5;
    3. ?>


    in der test1.php steht:

    PHP-Quellcode

    1. <!-- beliebiger html code -->
    2. <?php
    3. include("config.php");
    4. ?>
    5. <!-- weiterer html code -->
    6. <?
    7. echo "var: ".$var;
    8. include("./bla/test2.php");
    9. ?>
    10. <!-- weiterer html code -->


    in der test2.php steht:

    Quellcode

    1. <?
    2. echo "var:".$var;
    3. ?>


    Wenn ich nun die test1.php öffne, habe ich folgende Ausgabe:

    Quellcode

    1. var: 5
    2. var:


    Meine Frage ist nun warum ich innerhalb der test2.php (welche in test1.php included ist) nicht auf die Variable $var zugreifen kann. Geht das generell überhaupt, oder hab ich da einen Denkfehler drin?

    Ich hoffe ihr könnt mir helfen :)

    Gruß
  • php selber setzt die includes vor der Ausführung intern zusammen so, dass dein Script dann so aussieht:

    Quellcode

    1. <!-- beliebiger html code -->
    2. <?php
    3. $var = 5;
    4. ?>
    5. <!-- weiterer html code -->
    6. <?
    7. echo "var: ".$var;
    8. echo "var:".$var;
    9. ?>
    10. <!-- weiterer html code -->


    Es gibt keinen Grund warum das nicht funktioniert. Hast du es vll. nicht kopiert und hier im Forum richtig geschrieben, oder einen Part vergessen zu kopieren ?


    Sonst schau dir mal in der test2.php die Variable genauer an, was spuckt war dum aus ?

    test2.php

    Quellcode

    1. <?
    2. echo "var:".$var;
    3. var_dump($var);
    4. ?>
  • Okay, ich poste am besten mal den Originalcode, da es immernoch net funzt

    Hier die Ordnerstruktur:

    \config.php
    \index.php
    \modules\moduleToplayer.php

    config.php: Anmerkung: Habe diese als final static geschrieben -> Singleton

    Quellcode

    1. <?php
    2. include('./classes/PATH.php');
    3. include('./classes/classDatabase.php');
    4. final class CONFIG {
    5. private $instance = NULL;
    6. private $PATH;
    7. private $DATABASE;
    8. private function __construct() {
    9. $this->PATH =& new PATH();
    10. $this->DATABASE =& new DATABASE();
    11. }
    12. public static function getInstance() {
    13. global $instance;
    14. if (is_Null($instance)) {
    15. $instance = new CONFIG();
    16. }
    17. return $instance;
    18. }
    19. public function PATH() {
    20. return $this->PATH;
    21. }
    22. public function DATABASE() {
    23. return $this->DATABASE;
    24. }
    25. }
    26. ?>
    Alles anzeigen


    index.php:

    Quellcode

    1. <?php
    2. include("config.php");
    3. include("testconf.php");
    4. $var = 10;
    5. ?>
    6. <!--
    7. <html xmlns="http://www.w3.org/1999/xhtml">
    8. <head>
    9. <? include("./common/header.php"); ?>
    10. </head>
    11. <body>
    12. <div id="center_alignment">
    13. <div id="main_wrapper"> -->
    14. <?
    15. echo "var1: ".$var;
    16. include(CONFIG::getInstance()->PATH()->path_modules()."moduleToplayer.php");
    17. ?>
    18. <!--<? //include($CONFIG->PATH()->path_modules()."moduleNavigation.php"); ?>
    19. <? //include("common/splash.php"); ?>
    20. <div id="content_wrapper">
    21. <div id="content_box">
    22. <? //include("redirecter.php") ?>
    23. </div>
    24. </div>
    25. </div>
    26. <!-- <div id="footer">
    27. </div> -->-->
    28. </div>
    29. </body>
    30. </html>
    Alles anzeigen


    modules/moduleToplayer.php:

    Quellcode

    1. <!--<div id="mdlToplayer">
    2. <div id="linkList">
    3. <ul>
    4. <li>-->
    5. <? echo "var2: ".$var; include(CONFIG::getInstance()->PATH()->path_modules()."moduleToplayer.php"); ?>
    6. </li>
    7. <!--<li><a href="index.php?goto=kontakt">Kontakt</a></li>
    8. <li><a href="index.php?goto=impressum">Impressum</a></li>
    9. <li><a href="index.php?goto=disclaimer">Disclaimer</a></li>-->
    10. </ul>
    11. </div>
    12. </div>
    Alles anzeigen


    und hier die Ausgabe:

    Quellcode

    1. var1: 10 var2: NULL
    2. Fatal error: Class 'CONFIG' not found in /www/htdocs/w00c8974/_SANDBOX/modules/moduleToplayer.php on line 12
    3. -->-->


    wie Ihr sehen könnt hab ich schon ziemlich viel auskommentiert. Das Bsp mit test1.php usw habe ich in ein ganz neues Verzeichnis gepackt und, siehe da, es funktioniert. Ich bin aber der Meinung, dass das kleine Beispiel nicht anders ist, als der große Originalcode :(

    Bzgl. des var_dump(); beim funktionierenden Bsp gibter mir natürlich alles richtig aus, beim Original leider nur wieder NULL

    Gruß

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Giehlman ()

  • Hi,

    ich habe den Fehler gefunden, er liegt in dieser Zeile

    Quellcode

    1. include(CONFIG::getInstance()->PATH()->path_modules()."moduleToplayer.php");

    wenn ich die Pfadangabe damit ersetze

    Quellcode

    1. include("./modules/moduleToplayer.php");

    dann funktioniert es komplett.

    Jedoch versteh ich das nicht ganz, denn er findet mit der ersten Pfadangabe ja das File, er ersetzt die Pfadangabe, die ich aus der Config ziehe richtig mit "./modules/"...warum findet er die Klasse Config dann aber nicht, sprich es fehlt die ganze Referenz (class_exists(CONFIG) gibt " " aus) in moduleToplayer.php? Jemand eine Idee wie ich einen Testfall machen könnte?

    Gruß
  • Schau das Posting nochmal an - deine modules/moduleToplayer.php includiert selbst die modules/moduleToplayer.php ?
    Welche Datei rufst du überhaupt im Browser auf? index?

    Nur ein Tip: dirname(__FILE__) gibt dir immer den aktuellen Ordner zurück. Das hilft oft, wenn man irgendwelche Pfadprobleme hat.
    Lg
    OMG is das peinlich ^^ ich habs gerade entdeckt, wollt schnell den Thread schließen und jetzt hast dus schon gesehn :-% :)

    Ich habs jetzt umgeschrieben bzgl. rel. Ordnerpfade, jetzt funktionierts.

    thx -> kann geschlossen werden