Missing argument 3 for function

Hallo,

ich bekomme eine irgendwie nicht zielführende Fehlermeldung. Kann mir eventuell jemand helfen was hier die Ursache ist?

Ich habe eine Funktion in einem Modul


public function SaveInputVarmapping(string $MappingInputs)

Diese rufe ich mit


DAVRST_SaveInputVarmapping($ObjektID, $MappingInputs);

auf.
Bei mir funktioniert der Funktionsaufruf auch aber anscheinend kommt bei anderen Usern die Meldung

Missing argument 3 for DAVRST_SaveInputVarmapping()

Was soll mir diese Meldung sagen? Die Funktion hat doch kein 3. Argument was übergeben wird. Hat jemand eine Idee wo hier der Fehler liegen könnte?

Deine Definition mit einem Parameter, dein Aufruf aber mit zwei Parametern oder sehe ich das falsch?

Grundsätzlich gebe ich Dir da ja bei regulären Funktionen recht, nur bei den IP-Symcon PHP Modulen wird immer der Parameter in der Funktion definiert der übergeben werden soll. Aufgerufen wird die Funktion dann mit der ObjektID der Instanz zusätzlich.

Also eine Modulfunktion z.B.


public function SuperFunktion()

wird dann von außerhalb mit


Modulkürzel_SuperFunktion($ObjektID);

aufgerufen.

daher hat die Funktion einen Parameter mehr. Es kann aber auch sein, dass ich da grundsätzlich was verkehrt mache, aber eigentlich funktioniert das in der Regel bisher bei allen Funktionen der PHP Module so. Das ganz merkwürdige ist ja auch das die Fehlermeldung bei mir persönlich gar nicht kommt und die Funktion funktioniert, sondern nur bei einzelnen Usern diese Fehlermeldung auftaucht und daher die Funktion nicht richtig ausgeführt wird.

Mache ich hier den irgendwas grundsätzlich falsch?

Ich habe dank der Suche von wupperi jetzt einen neuen Hinweis für die Fehlerquelle. Mir ist aber noch nicht klar was die Ursache ist bzw. ob dies ein Bug von IPS 4 ist und wie man dies beheben kann.

Wie schon gesagt sieht die Funktion so aus


public function SaveInputVarmapping(string $MappingInputs)

Auffällig ist nun das bei mir, wo alles funktioniert die _generated.ips.php folgenden Eintrag enthält


function DAVRST_SAVEInputVarmapping($InstanceID, $MappingInputs)
{
	require_once('/usr/share/symcon/scripts/_ipsmodule.inc.php');
	require_once('/va/lib/symcon/modules/ipssymcondenon/Denon Splitter Telnet/module.php');
	return (new DenonSplitterTelnet ($InstanceID))->SaveInputVarmapping($MappingInputs);
}

Bei Usern bei denen die Fehlermeldung
Missing argument 3 for DAVRST_SaveInputVarmapping()
kommt sieht dagegen die _generated.ips.php mit exakt dem gleichen Modul so aus


function DAVRST_SaveInputVarmapping($InstanceID, $MappingInputs, $AVRType)
{
require_once('E:\ips\scripts\__ipsmodule.inc.php') ;
require_once('E:\ips\modules\IPSymconDenon\Denon Splitter Telnet\module.php');
return (new DenonSplitterTelnet($InstanceID))->SaveInputVarmapping($MappingInputs, $AVRType);
}

dies erklärt dann auch warum wegen dem fehlenden 3. Argument gemeckert wird.

Die Frage ist nun warum steht bei ein und dem selben Modul unterschiedliche Einträge in der _generated.ips.php
und wie kann man das beheben?

Hast du das gleiche Prefix für verschiedene Module benutzt?

Oder hatte deine Funktion in einer alten Version mal mehr Parameter? Dann hilft ein Neustart von IPS.

Michael

Danke mal wieder für die Info.:slight_smile:
Die Funktion hatte früher mal mehr Parameter und hat jetzt einen weniger, da AVRType nicht mehr separat übergeben werden muss, da dieser jetzt als Teil des Arrays $MappingInputs enthalten ist. Die Prefixe sind jeweils bei den Modulen unterschiedlich. Dann hoffen wir mal das ein Neustart hilft.

Was tut die _generated.ips.php eigentlich genau, und wird diese wie der Name vermuten lässt bei jedem Systemstart neu generiert?

Was sie tut siehst du doch :wink:
Sie erzeugt eine PHP-Instanz aus deiner Klasse und ruft die gewünschte Methode auf.
Allerdings sollte sie auch bei einem Modul-Update erneuert werden (ausser du hast Mist in deiner Klasse dass IPS es nicht versteht).
Das findet man aber im Log /unter Meldungen.
Michael

reboot löst das Problem.