Überlagerung von SetBuffer

Hallo,

ich habe ein kleines Problem.

Ich wollte in einem Modul SetBuffer überlagern


    public function SetBuffer($name, $data)
    {
        $this->SendDebug(__FUNCTION__, 'name=' . $name . ', size=' . strlen($data) . ', data=' . $data, 0);
        parent::SetBuffer($name, $data);
    }

das wird - richtigerweise - angemeckert

24.05.2018 21:45:33 | PHPLibrary | Parameter name in function BMW_SetBuffer has no type hint. Please use either 'bool', 'int', 'float' or 'string'.
24.05.2018 21:45:33 | PHPLibrary | Parameter data in function BMW_SetBuffer has no type hint. Please use either 'bool', 'int', 'float' or 'string'.

dann ändere ich das in


    public function SetBuffer(string $name, string $data)

und dann meldet IPS das:

24.05.2018 21:45:22 | BMWConnectedDrive | <br />
<b>Strict Standards</b>:  Declaration of BMWConnectedDrive::SetBuffer() should be compatible with IPSModule::SetBuffer($Name, $Data) in <b>/var/lib/symcon/modules/IPSymconBMWConnectedDrive/BMW/module.php</b> on line <b>1827</b><br />

in der Dokumentation steht das auch mit beiden Argumenten als ‚string‘

wo ist da mein Fehler?

danke

Setbuffer ist nie Public, sondern Protected.
Und die IPS Klasse hat noch keine Type hints, darum bist du dann nicht mehr kompatibel mit der Methode.
Michael

da bin ich etwas verwirrt. ich dachte alle Funktionen hier sind public?

alles klar, dann verstehe ich das.

Nö sind sie nicht.
Du musst ja auch unterscheiden zwischen Methoden wie ApplyChanges oder Create welche du überschreiben musst und Methoden welche dir eine Funktion liefen also aktiv etwas machen.
Wie SetBuffer oder Registervariable.
Dort macht IPS ja etwas für dich.

Michael

Schau mal hier: Generated Functions for IP-Symcon 5.0 · GitHub

Dort kannst du sehen welche Sichtbarkeit die jeweiligen Funktionen haben.

paresy

prima, das hilft mir.

Finde ich auch sehr gut, das für alles mögliche nun defines vorhanden sind, ist immer viel sprechender als Zahlenwerte.
Das einzige, was ich in diesem Zusammenhang vermisse sind defines für die Variablentypen, aber die machen ich mir in den Modules selbst.