Datentyp Array in public Methode

Ich übergebe mit onEdit eine Liste an eine public Methode.
Jetzt erscheint von IP-Symcon der Hinweis

Parameter x in der Funktion y hat keinen Datentyp. Definieren Sie entweder ‚bool‘, ‚int‘, ‚float‘ oder ‚string‘

es wird ja aber ein Array übergeben.

Wie werde ich also diesen Hinweis von IP-Symcon los? Können nur public Methoden durch onEdit aufgerufen werden?
Wenn ja, kann man den Datentyp als array definieren in der Methode, so das der Hinweis von IP-Symcon ausbleibt?

Nimm IPS_RequestAction in onEdit und dann kannst du das in der RequestAction Methode im Modul verarbeiten.
Hat nicht nur dem gewünschten Effekt, sondern benötigt dann keine eigene Public Methode.
Michael

Ist das nicht undokumentiert, soll man das wirklich nutzten? Und da kann ich doch auch nur einzelne Werte übergeben und keinen Array oder?

Am liebsten wäre es mir ja wenn man einfach


public function foobar (array $data)

nutzten könnte. Ist das denn inzwischen möglich oder geht das bei IP-Symcon immer noch nicht? Für PHP ist das ja grundsätzlich normal.

Oder gibt es auch die Möglichkeit protected Methoden aufzurufen, oder müssen diese immer public sein, wenn diese mit onEdit aufgerufen werden sollen?

Warum sollte man da kein Array übergeben können?
Warum sollte eine protected Methode öffentlich zugänglichen sein?
Auch wenn Symcon Array als Typ für Instanz-Funktion zulässt; willst du wirklich das ein User auf die Idee kommt diese Funktion vielleicht in seinen Scripten zu benutzen, weil die Konsole ihn das anbietet? Obwohl sie doch ausschließlich aus dem Konfig Formular benutzt werden soll.
Michael

Letzlich ist das doch nur eine Frage dessen wie IP-Symcon selber diese Sachen verarbeitet. Was da möglich ist und was nicht kann ich selber nicht beurteilen, dies kann nur das Entwicklerteam von IP-Symcon. Das public Methoden dem Nutzer zur Auswahl stehen ist halt so in IP-Symcon eingebaut.

Dennoch wäre es doch eine Überlegung wert, dass es nicht nur schwarz / weiß gibt. Es kann, wie Du ja schreibst, durchaus möglich sein, dass man aus einem Konfigurationsformular Daten übergeben will, aber diese Methode eben nicht unbedingt dem Nutzer in der Funktionsauswahl zur Verfügung stehen soll.

Daher würde mich einfach nur ein Hinweis von IP-Symcon freuen, wie das offziell gedacht ist. Wenn ich dafür so was wie IPS_RequestAction als offizielle Lösung nehmen soll, dann mache ich das, dann möchte ich aber auch das dies Bestand hat, und da das eine undokumentierte Funktion ist, weis ich eben nicht ob das eine funktioniernde dauerhafte Lösung darstellt.

Auf der anderen Seite kann ich eine public Methode nutzten, dann „meckert“ aber IP-Symcon rum bzw. gibt einen Hinweis darauf, dass doch ein Typ zu deklarieren ist.

Ob es unter Umständen vielleicht doch möglich wäre eine protected Methode zu nutzten kann ich nicht beurteilen. Schließlich gehört das Konfigurationsformular ja zu der Instanz bzw. der Klasse der Instanz. Falls es, in welcher Form auch immer, doch in IP-Symcon möglich wäre, hätte man so zumindest den Vorteil Daten von einer Liste an eine eigene Methode übergeben zu können, ohne das diese Methode dann eben auch automatisch dem Nutzer zur Auswahl der Befehle angeboten wird, weil dies eine Methode sein soll, die ausschließlich vom Konfiguartionsformular der Instanz genutzt wird.

Du kannst array nutzen und definieren. Dann ist diese Funktion aber nicht in der Konsole auswählbar (da der Nutzer ja nix sinnvolles damit machen kann). Aber ich glaube das wäre auch in deinem Sinne, oder?

IPS_RequestAction gibt es seit eh und je und daran planen wir auch nicht zu rütteln. Bleibt aber undokumentiert, da die wir nicht wollen, dass die Leute das mit dem normalen RequestAction irgendwie in der Doku verwechseln. :slight_smile:

paresy

Wird das dann auch nicht angezeigt oder kann man damit nur nichts anstellen? Grundsätzlich wäre das in meinem Sinne das dies dort auch nicht zur Auswahl steht.

Gibt es vielleicht zukünftig eine Option bestimmte Methoden nicht in der Auswahl anzeigen zu lassen, auch wenn diese public sind?

Danke auf alle Fälle Euch beiden für die Antwort, ich werde dann mal überlegen ob ich einfach ein array als Definition nutzte oder doch
IPS_RequestAction nutzte.

Es wird einfach nicht angezeigt. Per PHP kannst du es immer noch aufrufen, und STRG + Leertaste im Skript-Editor bietet es dir auch an. Nur der coole „Instanz testen“ Dialog nicht.

paresy