Neuer Variablentyp: "Variant"

Neu ist natürlich maßlos übertrieben. Damit ist nur eine String-Variable gemeint in der man den Inhalt unterschiedlicher Variablentypen speichern kann. (wie Boolean, Integer, Float, wenn nötig: String :), aber auch ganze Arrays).

Auch die Methode WIE ist nicht neu, andere geistern hier ja schon im Forum herum!

Fazit: Für alle, die es brauchen! :smiley:

Hier sind die Funktionen:
Ähnlichkeiten mit schon vorhanden sind natürlich nicht rein zufällig und gewollt.

<?
/*
***********************************
 IP-SYMCON Global Function Scripts
***********************************
File     : Global_Functions.ips.php

Zweck der Funktionen:
Erlauben den Zugriff auf eine externe Variable (vom Typ: String) unabhängig
vom verwendeten Variablentyp der internen Variable.
Funktioniert mit den folgenden Typen:
Boolean, Integer, Float, String & Arrays (hier auch kombiniert)

*/

function SetValueVariant($IPS_Variable,$PHP_Value) {
   if (IPS_GetVariableType($IPS_Variable)!='String') return false;
   return SetValueString($IPS_Variable,serialize($PHP_Value));
}

function GetValueVariant($IPS_Variable) {
   if (IPS_GetVariableType($IPS_Variable)!='String') return false;
   return unserialize(GetValueString($IPS_Variable));
}

function IPS_GetVariableVariantType($IPS_Variable) {
   if (IPS_GetVariableType($IPS_Variable)!='String') return false;
   $val=GetValueVariant($IPS_Variable);
   if (is_bool($val))   return 'Boolean';
   if (is_int($val))    return 'Integer';
   if (is_float($val))  return 'Float';
   if (is_string($val)) return 'String';
   if (is_array($val))  return 'Array';
   return false;
}

?>

Und hier ein Beispielscript zur Anwendung der Funktionen.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Probe.ips.php
*/

include_once('Global_Functions.ips.php');

for ($i=1;$i<=2;$i++) {
   // Im ersten Durchlauf wird die Variable  mit einem String "gefüttert"
   if ($i==1) $x="Nur eine Probe";
   // und dann im Zweiten mit einem Array überschrieben
   else       $x=array ("2" => "Two", "4" => "Four", "5" => "Five");
   
   // Speichern
   SetValueVariant("Variant_Var",$x);
   // und wieder auslesen
   $inhalt=GetValueVariant("Variant_Var");
   
   echo ('Inhalt: "'.$inhalt.'" vom Typ: '.IPS_GetVariableVariantType("Variant_Var")).chr(13);
   if ($i==2) print_r($inhalt);
}
?>

Viel Spass!

Günter.

Hallo Günter,

da hast Du Dir ja eine Menge Mühe gemacht.

Aber es gibt in PHP bereits die Funktionen serialize(…) und unserialize(…), die ebenfalls beliebige, auch komplexe Datentypen in einen (lesbaren) String verwandeln und auch wieder zurück.
Das Gute dabei ist, dass die Varibalentypen automatisch korrekt gehandhabt werden.

Gruß
HJH

Script abgwandelt. Grund siehe oben.
Günter

:DMit der …serialize… Funktion arbeite ich schon von Anfang an.

Ich speichere ganze Parameter-Blöcke zur Übergabe von Script zu Script oder zur Emulation von Laufzeitvariablen.

Damit simuliere ich ein „laufendes Programm“ welches interaktive Eingaben verarbeitet.
Normalerweise gibt es ja nur Trigger-Ablauf-Ergebnis.