korrekte Typ-Deklaration von Funktionsparametern

Hallo,

ich habe eine Frage:

wenn ich in einem Modul eine public-Funktion habe, sollten die Parameter ja Typen haben.

Nun ist das für mich klar, wenn es die Basisdatentypen sind. Ich übergebe aber an eine Funktion u.a. ein array.

Gebe ich nichts ein, kommt erwartungsgemäß eine solche Meldung:

09.07.2018 09:56:32 | PHPLibrary | Parameter map in function xxx has no type hint. Please use either 'bool', 'int', 'float' or 'string'.

Wenn ich nun die Variable als ‚array‘ deklarieren ändert sich nichts.

In der Funktionsübersicht im Editor (Ctrl+Space) wird die Variable in beiden Fälle als „Variant“ bezeichnet.

Was wäre die richtige Angabe? Oder soll man die Meldung in diesen Fällen ignorieren?

Getestet mit IPS 4.4, bei IPS 5 sehen die Meldungen gleich aus.

Danke
demel

Nimm einen String und arbeite mit json_decode.
Wie es z.b. auch IPS macht bei IPS_SetConfiguration.
Array ist kein Basistyp :wink:
Michael

ich hatte das so verstanden, das ab php 5 auch ein array ein typ ist (http://php.net/manual/de/functions.arguments.php).

ist aber nicht weiter wichtig, bin halt nur drüber gestolpert.
ändere ich

danke

Für IPS aber nicht :smiley:

Michael

Hallo,

in Anlehnung an die Antwort im Sonos Modul thread Sonos Modul - Seite 111 würde mich die Begründung interessieren.

Wenn PHP doch die Möglichkeit bietet ein array in einer Funktionsschnittstelle zu verwenden, warum lässt IPS dies im type hint nicht zu? Funktionieren tut es ja…
Wenn ich doch ein Array brauche, warum werde ich unnötigerweise dazu gezwungen es direkt vor dem Funktionsaufruf in ein JSON zu konvertieren, nur um es direkt als erstes in der Funktion wieder in ein array umzuwandeln?

Nur weil es IPS aktuell nicht unterstützt, muss es ja nicht für immer so bleiben :stuck_out_tongue:

Gruß,
Thorsten

Genau. Ist eher ein Missing Feature als ein „wir wollen es nicht“. Problematisch ist dann nur, dass die Konsole keinerlei Möglichkeit bietet diesen Befehl zu testen, da eben die Parameter nicht klar definiert sind. (Natürlich ist dies mit JSON im String auch nicht gegeben)

paresy

Hallo,

eine sehr nebulöse Antwort :slight_smile:

Also lese ich das jetzt mal optimistisch und gehe davon aus, dass diese Warnung ab dem nächsten Update verschwunden ist. :smiley:

Danke,
Thorsten

Ich hatte im Hinterkopf, dass die Angaben von Typen bald verpflichtend sind.
Also ohne Angabe IPS einem Fehler anstatt Warnungen auswirkt :smiley:
Wer braucht schon Arrays :wink:
Michael

Die Aussage war eher - es ist komplizierter als die Warnung verschwinden zu lassen. Aktuell kann IP-Symcon keine Arrays vollständig abbilden. Ein Beispiel ist das Test-Center der Verwaltungskonsole. Dass die PHP Funktion gehen, ist ein nett. Aber deine Funktion wird z.B. per JSON-RPC nicht gehen. Und das sollte sie aber, wenn wir Arrays erlauben.

paresy