IPSModuleStrict Preview

Da wir langsam den Changelog für den RC1 vorbereiten, wollte ich die Informationen zu IPSModuleStrict nicht verlieren und diese in einem frischen Thema ablegen. Wir haben uns außerdem entschlossen IPSModuleStrict in der 7.0 noch als „Preview“ zu betiteln, da es noch nicht alle von uns gewünschten Funktionen enthält. Wir werden zur 7.1 daran weiter arbeiten.

Hier noch unser Video, in dem wir auf die Hintergründe eingehen und auch unsere Wünsche für IPSModuleStrict:

Hinweise zur neuen PHP Version - insbesondere für Modul-Entwickler:

Aktuell läuft PHP 8.2 mit dem Error-Reporting auf „E_ALL ^ E_DEPRECATED“. D.h. wir haben alle Deprecations deaktiviert, um Zeit für notwendige Änderungen zu erlauben. Insbesondere sind utf8_encode und utf8_decode als Deprecated markiert, sodass die Deprecation Warnings aktuell noch viel Ärger bereiten würden.

Unsere Migrationsstrategie ist wie folgt:

  • IP-Symcon 7.0 lässt die Deprecations aus und bietet zeitnah eine neue IPSModuleStrict Klasse an, welche TypeHints bei den Klassen-Funktionen besitzt, Variablen als ReadOnly markiert ($this->SetValue muss dann genutzt werden) und welche im Datenfluss die Daten nicht mehr per „utf8_encode“ kodiert, sondern binäre Daten als HEX kodiert überträgt. Dies bedeutet, dass ein Buffer vom ClientSocket nicht mehr per utf8_decode, sondern per hex2bin verarbeitet werdet muss. Da fürs erste die IPSModule Klasse unangefasst bleibt - können wir in Ruhe umstellen.
  • IP-Symcon 7.x: Sobald eine kritische Masse an Modulen umgestellt wurde (wir können über den Module Store ja passende Statistiken erstellen) würden wir die Deprecations reaktivieren, um dadurch den Rest an Kleinigkeiten zu finden, sodass wir langfristig auf PHP 9.0 vorbereitet sind. Ende des Jahres kommt ja erstmal PHP 8.3. :slight_smile:

Hinweise zu IPSModuleStrict:

  • Da TypeHints definiert sind, sind auch diese für eure Klassen notwendig. Ich werde versuchen dafür ein Skript oder ähnliches zu schreiben, welches diese Fleißarbeit automatisiert.
  • Alle bisherigen Warnings sind nun Fehler. z.B. wenn keine TypeHints bei Public Funktionen definiert sind oder wenn ihr als TypeHint die veralteten Integer/Boolean TypeHint nutzt.
  • Bisher gab es keinen TypeHint für Variant. Dafür könnt ihr (seit PHP 8.0 verfügbar) mixed nutzen.
  • RegisterVariabe* liefert einen Boolean, ob die Variable erstellt wurde (bisher wurde die ID der Variable zurückgeliefert. Diese könnt ihr jederzeit über $this->GetIDForIdent beziehen)
  • Die erstellten Variablen sind ab sofort ReadOnly. D.h. ihr müsst $this->SetValue nutzen, um diese zu beschreiben
  • Der Datenfluss überträgt alle binären Daten als HEX-Kodiert. D.h. ihr müsst nicht mehr utf8_encode/utf8_decode nutzen, sondern bin2hex und hex2bin bei allen unseren nativen Instanzen. Für eure Modul könnt ihr weiterhin frei wählen aber generell ist utf8_encode/utf8_decode deprecated und sollte nirgends mehr genutzt werden
2 „Gefällt mir“