Presentation in RegisterVariable*

Fortsetzung der Diskussion von IP-Symcon 8.0 (Testing):

Darauf Bezug nehmend, gibt es das auch für MaintainVariable?

Und natürlich darf die Frage nach der Dokumentation dazu nicht fehlen, gibt es da auch schon ein Zeitfenster?
Michael

MaintainVariable kommt im RC2. An der Doku arbeiten wir gerade.

1 „Gefällt mir“

Ob die Doku bis zum Event fertig wird möchte ich nicht versprechen. Prinzipiell kannst du aber einfach mal in eine Variable schauen und den Inhalt von Presentation bzw CustomPresentation nehmen, das ist das gleiche Format.

1 „Gefällt mir“

Ich glaube, es passt in das Thema.

Ich bin gerade dabei ein Modul auf die geänderten RegisterVariable* Funktionen umzustellen.

Früher gab ich den Profilnamen als string mit, der auch leer sein konnte.

Nun soll laut Doku ein array für die Darstellung mitgegeben werden.


Aber auch ein Leerstring ist wohl weiter erlaubt:

Und laut Beispiel ist der Parameter auch optional:

Dagegen sagt die Reflection Klasse von PHP etwas anderes. Dort wird als Parameter „false“ oder Null erwartet:

RegisterVariableBoolean(string $Ident, string $Name, ?false $ProfileOrPresentation, int $Position): int

Irgendwie passt das nicht zusammen.

Meiner Meinung nach müsste es eher so sein:

protected function RegisterVariableBoolean(
    string $Ident,
    string $Name,
    string|array $ProfileOrPresentation = '',
    int $Position
): int

Wie ist es richtig?

Genau so sollte es sein. Ist das die Reflection von IPSModule oder IPSModuleStrict?

paresy

von IPSModuleStrict. IPSModule habe ich nicht überprüft.

Ist jetzt zwar offtopic, aber wenn du gerade dabei bist könntest du dir auch die ReturnTypes der Read* und Register* Methoden ansehen. Da brauche ich bislang Hilfsfunktionen zum Selberkorrigieren:

function correctReturnType(string $method, string $type): string
{
    return match ($method) {
        'ReadPropertyInteger' => 'int',
        'ReadPropertyFloat' => 'float',
        'ReadPropertyString' => 'string',
        'RegisterVariableBoolean', 'RegisterVariableInteger', 'RegisterVariableFloat' => 'int',
        'RegisterAttributeBoolean', 'RegisterAttributeInteger', 'RegisterAttributeFloat', 'RegisterAttributeString' => 'void',
        default => $type,
    };
}

function correctedHasReturnType(string $method, bool $hasReturnType): bool
{
    if (in_array($method, ['RegisterAttributeBoolean'
    , 'RegisterAttributeInteger'
    , 'RegisterAttributeFloat'
    , 'RegisterAttributeString'
    , 'RegisterPropertyInteger'
    , 'RegisterPropertyFloat'
    , 'RegisterPropertyString'
    , 'RegisterPropertyBoolean'
    , 'RegisterTimer'
    , 'RegisterOnceTimer'
    , 'RegisterMessage'
    , 'RegisterReference'
    , 'SendDebug'
    ])){
        return false;
    }
    return $hasReturnType;
}