Servus,
Vorweg, vielen herzlichen Dank - vor allem die Beispiele haben sehr geholfen.
Ich bin mir nicht mehr ganz sicher, wo das Problem lag, wahrscheinlich hatte ich die Funktion zu chaotisch angelegt.
Dieses Mal, mit simplem code, klappt alles so wie ich es wollte.
Zu dem Code siehe zuletzt, vorweg ein paar Antworten, soweit ich die auch geben kann.
-Über den Gültigkeitsbereich von Variablen habe ich einiges gelesen. Allerdings ... verstehe ich eher die Praxis als die Theorie, das dauert bei mir etwas länger. ;-)
"kann man sie am Ausführungsende der jeweiligen Funktion mittels dem Befehl "return" zurückgeben."
Das ist definitiv etwas, mit dem ich mich mehr beschäftigen muss/werde.
"aber wer oder was hindert dich denn daran, den include vor dem zugriff auf die variablen zu machen?"
Ich kann leider nicht mehr 100% genau wiedergeben, was ich wollte. Aber die include sollte Rücksicht nehmen, in welchem Verzeichnis man/frau sich befindet. ZB sollte der Unterschied 'so-gut-als-möglich automatisch' festgestellt werden. Ich bin ein Directory Monster.
Nun der Code Teil, es funzt (Anmerkung, Dateien A.php und B.php sind im selben Verzeichnis, C.php ist eine Ebene darunter):
-A.php
<?php
// A.php:
include('B.php');
b_load('..');
echo $foo;
echo $bar;
?>
-B.php
<?php
// B.php:
function b_load($file) {
$C_PHP="${file}/C.php";
if(file_exists($C_PHP)) { include($C_PHP);}
}
?>
-C.php (code mit Forum comments :-) )
<?php
// C.php:
//$bla = "blubb";
//$foo = "bar";
// geht nit, Variablen sind nur im Kontext von function b_load in B.php gültig,
// und somit (noch) nit global
$GLOBALS["foo"]="bar";
$GLOBALS["bla"]="blubb";
$GLOBALS["bar"]=" -BAR- ";
// nun geht das ganze, die Variablen sind global, mittels Array kann man das ganze noch
// einfacher schreiben, siehe darunter
//$GLOBALS["config"] = Array(
//"foo"=>"bar",
//"bla"=>"blubb"
//);
//ist evtl. einfacher zu schreiben, allerdings muss man dann auch mit echo $config["foo"] zugreifen.
?>