Probleme bei Wechsel auf PHP7.4 - Debugging?

  • Moin,


    ich habe ein eigenes Paket, das Anmeldungen (Raumbelegung) für Treffen verwaltet. Das ist bisher problemlos gelaufen.


    Ich habe jetzt die gesamte Installation (tar und db) auf einen anderen Server umgezogen - Forum usw laufen problemlos, aber mein Skript "stirbt" mit dem Fehler

    "Trying to access array offset on value of type int"


    Der Wechsel (zurück) auf PHP7.2 behebt den Fehler.


    Der Fehler tritt in einem Template auf, ich habe auch die entsprechende Stelle in der .tpl-Datei gefunden. Die Umgebung (PHP im WCF-Kontext) ist ja nicht ideal zum Debuggen - wenn ich erstmal rausbekommen möchte, welches Objekt überhaupt den Fehler erzeugt, kann ich irgendwie "Debugausgaben" schreiben? (ein einfaches "echo" geht ja eher nicht), und wo finde ich die dann?


    Die (etwas komplexe) Zeile ist


    Smarty
    {if !$meetingLocked}
        {if $meetingRoom->beds - $BedList[$meetingRoom->roomID]["beds"]>0}
            <a href="{link controller='BookingUserAdd' object=$meetingRoom}{/link}"><span class="icon icon24 fa-plus"></span></a>
        {/if}
    {/if}


    Ich vermute, es ist $BedList[], und der Index "beds" schlägt fehl...


    Gruß

    Sebastia

  • {$BedList|wcfDebug} bzw. wcfDebug($BedList); oder var_dump($BedList); innerhalb von PHP, insofern die Variable dort den selben Namen hat.


    Das Problem wird $BedList[$meetingRoom->roomID] sein.


    Mal ins Blaue geraten:

    PHP
    {if $BedList[$meetingRoom->roomID]|isset && $meetingRoom->beds - $BedList[$meetingRoom->roomID]["beds"]>0}


    Solche Logik würde ich persönlich übrigens in Methoden auslagern. Beispielsweise hieße die bei dir MeetingRoom::canBeBooked() welche dir entweder true oder false zurückliefert und ggf. auch schon $meetingLocked mit einbezieht.

  • Das war es, aber nicht ganz - wenn der entsprechende Index in $BedList nicht belegt ist, wird 0 zurückgegeben, insofern schlägt isset nicht an.


    Wenn ich auf "== 0" teste, geht es aber.


    Nochmal vielen Dank!