PHP-Version 8
Funktionen & Bedingungen
Intern werden grundsätzlich alle Werte in den Datenbanken als String (Zeichenkette, die in Anführungszeichen gesetzt wird) abgespeichert. Dies bedeutet, dass bei den Features (Filter, Funktionen und Bedingungen bei den Funktionen) folgende Verhaltensänderungen besondere Aufmerksamkeit verdienen. Bei String-Vergleichen, bei denen Leerzeichen übergeben werden, wird PHP sich zukünftig wie folgt verhalten:
Beispiel Vergleich | Ergebnis PHP-Version 7 | Ergebnis PHP-Version 8 |
|---|---|---|
'42 ' != '42' | true | false |
'42 ' == '42' | false | true |
'42 ' <= '42' | false | true |
'42 ' > '42' | true | false |
Des Weiteren besteht die Möglichkeit bei funktionsbasierten mathematischen Berechnungen durch 0 (null) zu teilen. Entgegen der Teilbarkeitsregel erhalten wir dennoch das Ergebnis 0 (null). Dieses Verhalten wird so auch bestehen bleiben. Allerdings ist hier zu empfehlen, eine Prüfung auf „ungleich 0 (null)“ einzuziehen.
Um eine bessere Datenqualität zu erreichen, haben wir unser Logging dahingehend erweitert, dass ersichtlich ist, wann funktionsbasierte mathematische Berechnungen und Vergleichsoperationen mit nichtnumerischen Werten durchgeführt werden. Dieses Logging liegt dem Account Manager für eine weitere Abstimmung vor.
Templates
Bei unseren Templates gibt es grundsätzlich drei Fehlerpotentiale:
Bei Berechnungen mit nichtnumerischen Werten oder Divisionen durch 0 (null) werden in einem Logfile bereits Warnings geschrieben. Dieses liegt dem Account Manager für eine weitere Abstimmung vor.
Mit dem PHP8-Update werden diese Warnings zu Errors und dies führt wiederum zu Feed-Abbrüchen.Die Verarbeitung von nichtnumerischen Werten in den Modifikatoren round, floor, ceil und number_format führt ebenso zu einem Feed-Abbruch.
Ebenfalls wird es bei Vergleichsoperationen mit nichtnumerischen Werten zu Verhaltensänderungen kommen. Diese können der folgenden Übersichtsstabelle entnommen werden.
Beispiel Rechnung | Ergebnis PHP-Version 7 | Ergebnis PHP-Version 8 |
|---|---|---|
'' == 0 | true | false |
0 == '' | true | false |
0 == 'EUR' | true | false |
'42 ' == '42' | false | true |
'' != 0 | false | true |
0 != '' | false | true |
0 != 'EUR' | false | true |
'42 ' != '42' | true | false |
'' >= 0 | true | false |
10 >= '5EUR' | true | false |
'10EUR' >= 5 | true | false |
0 >= 'EUR' | true | false |
10 >= 'EUR5' | true | false |
'EUR10' >= 5 | false | true |
0 <= '' | true | false |
10 <= '5EUR' | false | true |
'10EUR' <= 5 | false | true |
10 <= 'EUR5' | false | true |
'EUR10' <= 5 | true | false |
'42 ' <= '42' | false | true |
0 > '' | false | true |
10 > '5EUR' | true | false |
'10EUR' > 5 | true | false |
10 > 'EUR5' | true | false |
'EUR10' > 5 | false | true |
'42 ' > '42' | true | false |
'' < 0 | false | true |
10 < '5EUR' | false | true |
'10EUR' < 5 | false | true |
0 < 'EUR' | false | true |
10 < 'EUR5' | false | true |
'EUR10' < 5 | true | false |
'NULL' <= 5 | true | false |
'NULL' < 5 | true | false |
'NULL' >= 5 | false | true |
'NULL' > 5 | false | true |
5 <= 'NULL' | false | true |
5 < 'NULL' | false | true |
5 >= 'NULL' | true | false |
5 > 'NULL' | true | false |
Ein konkretes Beispiel für den Fall '' == 0:
{if $src.days_for_delivery == 0}
out of stock
{else}
in stock
{/if}
Das Template gibt nach aktuellem Stand ''out of stock '' zurück, wenn die Spalte ''days_for_delivery'' gleich 0 (null) oder leer ist. Nach dem PHP8-Update wird bei dem Vergleich mit einem leeren Wert „in stock“ zurückgegeben.
An dieser Stelle bitten wir darauf zu achten, die Datenlieferanten-Mappings eigenständig zu prüfen und ggf. auch anzupassen. Änderungen können nicht von PIA Feed Dynamix vorgenommen werden, da die Entscheidung, welches Ergebnis gewünscht ist, nicht ohne individuelle Abstimmung getroffen werden kann. Sollte es hierzu Fragen geben, steht Ihnen das PIA Feed Dynamix Team selbstverständlich gerne zur Verfügung.
Über die folgenden Links finden sich weitere Informationen zu den anstehenden Änderungen, welche sich durch das PHP8-Update ergeben: