Optionale Paramter in public module Funktionen

Hallo zusammen,

ich wollte einen Optionalen Parameter in einer Funtion eines Moduls haben.
Dieser wird aber als manatory abgefragt.

Ich habe das mal in einem Testmodul nachgestellt: tkugelberg/ThorstenTest · GitHub

die modules.php ist da sehr einfach:


<?
class ThorstenTest extends IPSModule
{

    public function Create()
    {
        //Never delete this line!
        parent::Create();

        //These lines are parsed on Symcon Startup or Instance creation
        //You cannot use variables here. Just static values.
    }

    public function ApplyChanges()
    {
        //Never delete this line!
        parent::ApplyChanges();

    }

    public function optional($mandatory, $optional=false)
    {

    }

}
?>

Wenn ich jetzt PHP richtig verstanden habe, sollte nun der parameter „$optional“ der Funktion optional optional sein. (vielleicht hätte ich doch andere Namen wählen sollen…)

Wenn ich im IPS nun aber dies aufrufe, bekomme ich diese Fehler:

Auch ist in der Comand Completion nichts von optional zu sehen.
optional.png

Kann es sein, dass das ein Fehler bei den Modulen ist, oder habe ich das was nicht richtig verstanden?

Ich könnte mir vorstellen, dass es an der Stelle ist, wo die Funktion „optional“ als „TKTST_optional“ exponiert wird…

Danke,
Thorsten

IPS kann das einfach nicht umsetzen.
Vor der 4.0 wäre es auch nie gegangen.
Ob Paresy dies irgendwann unterstützt…? Keine Ahnung :wink:
Als Alternative eine Array (OK das kennt IPS auch so nicht) nutzen wo einige Indexes optional sind.
Oder gleich einen JSON-String, weil ein String kennt IPS ja.
Michael

Hi,

danke für die schnelle Antwort.
Aber das würde ich keinem Verwender zumuten wollen. Das ist ja alles andere als selbsterklärend…

Gruß,
Thorsten

Kommt auf die Doku an :wink:

Wenn du viele Daten brauchst, kommst da aber nicht rum.

Sicherlich ist es für einen Wert wie mit Kanonen auf Spatzen schießen.

Sonst bau doch zwei Funktionen.

Michael

IP-Symcon hat leider noch nie optionale Parameter gekannt. Somit ist es nett, dass PHP dies bereitstellt - nur leider weiß IP-Symcon damit nichts anzufangen. Daran wird sich leider so schnell auf nichts ändern. Es sind somit immer alle Parameter erforderlich.

Der Workaround ist mehrere Funktionen zu erstellen, welche dann ggf. Abkürzungen zu der großen Funktion sind.

paresy