Kopfschmerzen mit Typdeclarationen

Ich versuche mich gerade am Update meiner Module für 5.0.

Ich hate mitgenommen, das man für die Nutzung von Funktion aus IPSModule die Typdefinitionen mitgeben muss. Das habe ich eingebaut, aber trotzdem bekomme ich Fehler beim Start:


08/18/18 11:24:02 | 00000 | PHPLibrary | Registriere Funktion... Reflection parse error: 
Warning: Declaration of EnergyDev::SendDataToParent(string $Data) should be compatible with IPSModule::SendDataToParent($Data) in /var/lib/symcon/modules/tommi2day/Energy/module.php on line 23

mache ich das raus, bekomme ich wieder die Typehint Warnung

08/18/18 11:40:23 | 00000 | PHPLibrary | Parameter Data in function END_SendDataToParent has no type hint. Please use either 'bool', 'int', 'float' or 'string'.

Wie denn nun???

Tommi

Die Methoden der IPSModul Klasse haben keine Typendeklaration.
Es ist auch sehr ungünstig das du versuchst diese Protected Funktionen, welche eigentlich nur innerhalb deiner Klasse zu benutzen sind, als Instanz-Funktion bereitzustellen.
Das wird somit nicht funktionieren.
Michael

OK, Danke!

hatte noch gar nicht mitbekommen, das sie nicht mehr public sind. ForwardData und ReceiveData sind ja auch noch public

Tommi

Wir hätten gerne die Typdefinitionen hingefügt für alle internen Funktionen. Leider wären dann alle alten Module vollständig inkompatibel geworden und es hätte einen kompletten Bruch von 4.x auf 5.0 gegeben, was wir vermeiden wollten.

Ich überlege demnächst eine neue IPSModuleStrict anzubieten, welche dann die Typen enthält.

paresy

Werden dann auch andere Methoden wie ForwardData oder ReceiveData Protected wie schon beim Webhook?
Wobei der Name ja doof ist :wink:
Mach doch einfach IPSModul daraus und die ist dann ab IPS 6.0 Pflicht :smiley:
Michael

Ich habe hierzu auch noch ein Frage:

Ich habe ein PHP Modul geschrieben, dessen Funktionen ich über Ereignisse direkt ausführen möchte (also mit „Führe einen Befehl auf der Instanz aus“ und nicht per Skript).

Jetzt habe ich das Problem, dass bei fehlendem Typehint in der Ereignis-Konfiguration nicht der Parameter angezeigt wird, der der Funktion übergeben werden soll. Dieser wird nur angezeigt, wenn ein Typehint gegeben wird. Wenn ich allerdings einen Typehint gebe, erhalte ich folgenden Fehler:

02.01.2019, 12:07:49 | ScriptEngine | Ergebnis für Ereignis 38380
<br />
<b>Fatal error</b>:  Uncaught TypeError: Argument 1 passed to Group::SwitchMode() must be an instance of boolean, boolean given, called in /var/lib/symcon/scripts/__generated.inc.php on line 1171 and defined in /var/lib/symcon/modules/ipsgroupsandscenes/Group/module.php:302
Stack trace:
#0 /var/lib/symcon/scripts/__generated.inc.php(1171): Group->SwitchMode(true)
#1 /-(1): GROUP_SwitchMode(30600, true)
#2 {main}
  thrown in <b>/var/lib/symcon/modules/ipsgroupsandscenes/Group/module.php</b> on line <b>302</b><br />

Hängt dieser Fehler mit dem o.g. zusammen oder muss auch etwas besonderes beachten, wenn ich eine Funktion über Ereignisse ausführen möchte?

Der Typehint muß „ bool“ heißen, nicht „boolean“. Tut er das?

Kaum macht man’s richtig, klapp es. Das war der Fehler, nun funktioniert es. Vielen Dank!