Pryos.org: Automatisieren mit __autoload

Problem / Frage:
Ich include mit Hilfe von __autoload eine Klasse incl. einer Konfigurationsdatei und mache die Config-Varibalen Global.

Wenn ich beim oder nach dem Erstellen der Klasse (im globalen Script) die Config-Variablen verwenden möchte, fehlen Sie.

Da das Objekt im __autoload noch nicht existiert und ich auch nicht weiß wie es heißen soll kann ich die Variablen da noch nicht in das Objekt schreiben.

Fällt jemanden hier noch eine automatisierbare Lösung ein, wie ich an die Variablen komme?

Mein Ziel ist es, eine Art Freamwork (mit eigenen und fremden Klassen) zu entwickeln, welches ich nur einmal in einem Order vorhanden ist (ähnlich wie Typo3) und dann unterschiedlichst genutzt werden kann.

Ist:
Ich besitze ein globalen Ordner "lib", welcher meine PHP-Klassen enthält.
Sowie einen Domain-Ordner "conf", welcher die Configurationsdateien der aktuellen Domain enthält.

Zu guter letzt befindet sich in einer Standart-Datei eine Autoload Funktion:

  
function __autoload($class_name) {  
	Global $path_lib, $path_cnf;	# Lib / Config Pfad holen  
	if (file_exists($path_lib.$class_name.".php")) {	# Exisitert die Lib?  
		$globalVars	= array();  
		$globalVars = get_defined_vars();				# Vorhandene Globale Variablen einlesen  
		  
		require_once $path_lib.$class_name.".php";		# Lib includen  
		if (file_exists($path_cnf.$class_name.".php")) require_once $path_cnf.$class_name.".php";	# Wenn vorhanden Config Datei includen  
		$vars = array_diff_key(get_defined_vars(), $globalVars);	# Neue Variablen identifizieren  
		foreach($vars as $key => $var) $GLOBALS[$key] = $var;		# Neue Variablen wegschreiben  
	}  
}

Beispiel-Versuch:
Ich lade die eingestellte Datenbank. In diesem Fall "lib/Mysql.php":

  
switch (strtolower($db_type)) {  
case "notes": $db = new LotusNotes(); break;  
case "mysql":  
default:  
	$db = new MySql();  
	$db->connect($db_host, $db_user, $db_pw);  
	$sql = "SET CHARACTER SET utf8";  
	$db->query("$sql");  
	$db->select_db($db_database);  
}

Diese enthält eine Configurationsdatei "cnf/MySql.php":

  
$db_host	= "127.0.0.1";  
$db_database	= "***";  
$db_user 	= "***";  
$db_pw  	= "***";
  1. echo $begrüßung;

    Wenn ich beim oder nach dem Erstellen der Klasse (im globalen Script) die Config-Variablen verwenden möchte, fehlen Sie.

    Untersuche bitte das Problem genauer. Analysiere mit Kontrollausgaben, wann welche Variablen welchen Inhalt haben, welche Ergebnisse die Funktionen liefern und wann das nicht mehr mit deinen Vorstellungen übereinstimmt.

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      »» Wenn ich beim oder nach dem Erstellen der Klasse (im globalen Script) die Config-Variablen verwenden möchte, fehlen Sie.

      Untersuche bitte das Problem genauer. Analysiere mit Kontrollausgaben, wann welche Variablen welchen Inhalt haben, welche Ergebnisse die Funktionen liefern und wann das nicht mehr mit deinen Vorstellungen übereinstimmt.

      echo "$verabschiedung $name";

      hm

        
      function __autoload {  
       # vorhanden  
       foreach () {  
        # vorhanden  
       }  
      }  
        
      $klasse = new Klasse();  
      # nich tvorhanden  
      
      

      Aber inzwischen habe ich bemerkt, das es so funktioniert, wie ich es mir Vorgestellt habe.  Wenn die Variablen vor der __autoload Funktion schon exisiteren.

      1. echo $begrüßung;

        Aber inzwischen habe ich bemerkt, das es so funktioniert, wie ich es mir Vorgestellt habe.  Wenn die Variablen vor der __autoload Funktion schon exisiteren.

        Prinzipiell kann ich dein Problem nicht nachvollziehen.

        function __autoload($class) {
            require_once 'foo.php';
            $GLOBALS['foo'] = $foo;
          }

        $x = new foo();

        print_r($GLOBALS);

        -------
        foo.php:

        class foo { }

        $bar = 42;

        Die print_r()-Ausgabe zeigt mit unter anderem bar und x an.

        echo "$verabschiedung $name";

        1. print_r($GLOBALS);

          Ich verwende nun auch $Globals Variablen, ist nicht ganz so wie geplant, aber es funktioniert.

          Danke :)
          Dann kümmmere ich mich mal um das nächste Problem