PHP 8 - Warnungen bei Arrayzugriff

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
msta
Mitglied
Beiträge: 34
Registriert: 09.05.2016 11:24

PHP 8 - Warnungen bei Arrayzugriff

Beitrag von msta »

Hallo,
wie ihr sicher wisst, kommt bei PHP 8 jetzt eine Warnung, wenn man auf ein undefiniertes Array-Element zugreift.

Bei mir ist es an vielen Stellen aber so vorgesehen, dass auf leere Elemente zugegriffen wird. Manchmal auch so:

Code: Alles auswählen

 if (theArray[someKey]) { print('Object exists!'); }
Es kann sein, dass dann ein schon mal angelegtes Element mit null überschrieben wird, um es zu löschen. Das soll ja schneller sein, als den Array-Schlüssel zu löschen.

In einigen Fällen handelt es sich auch nicht um Arrays, sondern um Klassen mit entsprechendem standrad-Property []. So wie die Events von phpBB. Da funktioniert dann array_key_exists nicht.

Ich habe jetzt überall dort, wo es Warnungen gab, einfach immer ein @ davor gesetzt. Aber ist das wirklich so gedacht? Und gibt es eine Garantie, dass das auch in Zukunft so funktioniert?

Außerdem ist es super schwer, alle Stellen zu finden, wo so ein Array-Zugriff passiert. Gibt es da einen Trick?
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: PHP 8 - Warnungen bei Arrayzugriff

Beitrag von IMC »

Probiere mal das hier:

Code: Alles auswählen

 if (isset(theArray[someKey]) && theArray[someKey])
 {
 	print('Object exists!');
 }
 
Zumindest bei php 7.x habe ich damit schon so manche Warnmeldung beseitigt.

Habe eben nochmal meine Codes überflogen.
Einige male habe ich auch mit empty() gearbeitet.
Gruß, Thorsten
msta
Mitglied
Beiträge: 34
Registriert: 09.05.2016 11:24

Re: PHP 8 - Warnungen bei Arrayzugriff

Beitrag von msta »

Ja, offenbar gibt es mit isset kein Problem. Das erkennt zwar auch null, aber bei leeren Strings gibt es wieder true zurück. Also muss ich in den meisten Fällen so einen Mehrfachvergleich machen. Ein @ davor setzen ist einfacher...

Naja, habe jetzt bei dem einen Projekt mal alle @ gesucht und durch isset-Extra-Check ersetzt.
Antworten

Zurück zu „Coding & Technik“