Einbinden von Variablen über include

Hallo zusammen,

ich möchte immer wieder verwendete Variable mit zugewiesenen Objekten per include in die Scripte einbinden. Dabei kriege ich immer die Meldung, dass die Variablen unbekannt seien.
Das Coding ist genau, wie in dem Beispiel in der Dokumentation, nur das ich nicht die Datei mit den Funktionen in die Datei mit den Variablen include, sondern umgekehrt.
Jetzt habe ich in der Doku zu PHP einiges zum Thema Geltungsbereich von Variablen gelesen, aber noch nicht ganz durchdrungen.
Deshalb die Frage(n):
Geht dieses Vorgehen überhaupt?
Und muss ich gegebenenfalls die Variablen als global deklarieren?

Über die Antwort freut sich
Stephan

Hallo Stephan,

das sollte prinzipiell problemlos möglich sein, allerdings funktioniert das nicht, wenn Du in Funktionen auf diese Variablen zugreifen willst, dort sind diese NICHT sichtbar. Falls das das Problem ist, nimm einfach Konstanten, die sind überall sichtbar.

Als Beispiel kannst Du Dir auch meinen IPSLogger ansehen, dort habe ich das auch so gemacht …

lg
Andreas

die Sufu liefert da jede Menge Ergebnisse ab. :wink:

Hallo Andreas,

danke, das bestätigt meinen Verdacht.
Konstanten helfen mir leider nicht, da ich vorhatte, meine Instanzen über Array-Definitionen anzusprechen, die ich in verschiedenen Skripten wiederverwenden kann.

Gruß
Stephan

ich habe eine Include-Klasse geschrieben, deren config-Objekt ich überall initialisieren und befragen kann.

Siehe config-Klasse von http://www.ip-symcon.de/forum/f23/universelle-heizungssteuerung-12051/.

Gruß,

ernie

Hallo Ernie,

ich habe aus Deiner Heizungssteuerung schon ein paar Ideen „geklaut“. Danke schön dafür.
Für meinen Fall habe ich etwas schlankeres gesucht, damit das System möglichst wenig belastet wird.

Ich erstelle jetzt Scripte, die mir Variablen quasi global zur Verfügung stellen.
Hier ein Beispiel:

Das Script hat den festen Namen „FHT80bListe.ips.php“ und sieht folgendermassen aus:

<?php

function getFHT80bListe() {
	//FHT-IDs in Array ablegen
	$FHT_Liste=array();
	$FHT_Liste[]=19049 /*[Haus\EG\Diele\FHT80b]*/;
	$FHT_Liste[]=45021 /*[Haus\EG\Esszimmer\FHT80b]*/;
	$FHT_Liste[]=12378 /*[Haus\EG\Kueche\FHT80b]*/;
	$FHT_Liste[]=49146 /*[Haus\EG\Wohnzimmer\FHT80b]*/;
	$FHT_Liste[]=47662 /*[Haus\OG\Bad\FHT80b]*/;
	$FHT_Liste[]=19114 /*[Haus\OG\Flur\FHT80b]*/;
	$FHT_Liste[]=47744 /*[Haus\OG\Gaube\FHT80b]*/;
	$FHT_Liste[]=50749 /*[Haus\OG\Schlafzimmer\FHT80b]*/;
	$FHT_Liste[]=49077 /*[Haus\OG\Theresa\FHT80b]*/;
	$FHT_Liste[]=25885 /*[Haus\OG\Tobias\FHT80b]*/;

	return $FHT_Liste;
}

?>

Ich benutze es z.B. um für jedes Gerät, welches einen Batteriewechsel benötig, auf der Startseite des Webfronts die Batteriestatusanzeige einzublenden. Das sieht folgendermassen aus:

<?php

include("FHT80bListe.ips.php");

	// Überwachung der FHT-Batterien
	foreach(getFHT80bListe() as $fht) {
		$var = @IPS_GetVariableIDByName("Batterie", $fht);
		if($var != FALSE AND GetValueFormatted($var) != "OK") {
		   // Link mit Pfad ganz oben im Baum erzeugen
		   $LinkID = IPS_CreateLink();
		   IPS_SetParent($LinkID, 0);
			IPS_SetName($LinkID, IPS_GetLocation(IPS_GetParent($var)));
			IPS_SetLinkChildID($LinkID, $var);
		}
	}

?>

Gruß
Stephan

nicht nur für die FHT´s :cool:

Hier gibt es noch mehr.