Bastian: php Migration auf 8.xx

Hallo,

inspiriert von Rolfs Post habe ich mir eben ein Testsystem aufgespielt:

    Apache/2.4.53 (Win64) OpenSSL/1.1.1n PHP/8.1.5
    Datenbank-Client Version: libmysql - mysqlnd 8.1.5
    PHP-Erweiterung: mysqli Dokumentation curl Dokumentation mbstring                             Dokumentation
    PHP-Version: 8.1.5

Server-Version: 10.4.24-MariaDB - mariadb.org binary distribution 

Was mich aber ein bisschen wundert, ist, dass meine Scripte im Wesentlichen auf einer php 8 - Distribution laufen, während z.b. die 8.15er Version mir gleich schon meine nicht in Hochkommata geschriebenen Funktionsparameter um die Ohren haut.

Fatal error: Uncaught Error: Undefined constant "url" in D:\xampp8\htdocs...\functions.php:239

Ist das denn erst seit 8.15 zum fatalen Fehler geworden? Ich hätte das, wenn schon, ab 8.0 erwartet.

Bastian

  1. Hallo

    Was mich aber ein bisschen wundert, ist, dass meine Scripte im Wesentlichen auf einer php 8 - Distribution laufen, während z.b. die 8.15er Version mir gleich schon meine nicht in Hochkommata geschriebenen Funktionsparameter um die Ohren haut.

    Fatal error: Uncaught Error: Undefined constant "url" in D:\xampp8\htdocs...\functions.php:239
    

    Ist das denn erst seit 8.15 zum fatalen Fehler geworden? Ich hätte das, wenn schon, ab 8.0 erwartet.

    Erstens PHP 8.1.5, nicht 8.15. Nicht, dass, falls es jemals eine Version 8.15 geben sollte, jemand die Informationen in diesem Thread falsch interpretiert.

    Die Schwere eines Fehlers kann von PHP-Version zu PHP-Version neu interpretiert und eingeordnet werden. Wenn ich mich richtig erinnere, löste ein Variablenname ohne führendes $ oder ein Ein-Wort-String ohne Anführungszeichen früher™️ nur eine Warnung aus, die nicht zum Abbruch des Skripts führte. Das sieht das PHP-Team heute offensichtlich anders und stuft einen solchen Fehler nun als Error ein. Solche Änderungen hat es immer wieder mal gegeben.

    Tschö, Auge

    --
    200 ist das neue 35.
    1. Hallo Auge,

      Das sieht das PHP-Team heute offensichtlich anders und stuft einen solchen Fehler nun als Error ein. Solche Änderungen hat es immer wieder mal gegeben.

      Darum gehts mir nicht, es war ja auch lange genug bekannt. Ich wollte nur wissen, ob es richtig ist, dass es unter 8.0 noch eine Warnung war und unter 8.1.5 ein Fehler.

      Bastian

      1. Hallo

        Das sieht das PHP-Team heute offensichtlich anders und stuft einen solchen Fehler nun als Error ein. Solche Änderungen hat es immer wieder mal gegeben.

        Darum gehts mir nicht, es war ja auch lange genug bekannt. Ich wollte nur wissen, ob es richtig ist, dass es unter 8.0 noch eine Warnung war und unter 8.1.5 ein Fehler.

        Soweit ich das sehen kann, hat sich diese Einordnung bereits mit PHP 8.0 geändert.

        A number of warnings have been converted into Error exceptions:

        • Attempting to access unqualified constants which are undefined. Previously, unqualified constant accesses resulted in a warning and were interpreted as strings.

        Tschö, Auge

        --
        200 ist das neue 35.
  2. Hallo Bastian,

    sind das deine Functions? Man sollte sich - gerade im Entwicklermodus, die Notify- und Warning Meldungen schon durchlesen, die man bekommt.

    Bitte zeige uns, in welchem Kontext diese Meldung kommt, denn dieses PHP Script würde unter 8.0 auch schon nicht laufen:

    <?php
    $a = ARRAY("Hallo" => "Welt");
    echo $a[Hallo];
    

    ARRAY() Schreibweise, damit ich es auch unter 5.0 testen konnte. Die PHP Sandbox - jetzt unter https://onlinephp.io/ zu finden - ist großartig dafür.

    Es war bis PHP 5.1 auffällig. Die PHP Versionen von 5.2 bis 7.1 schreiben einen Notify. Für 7.2 bis 7.4 gibt's eine Warnung und die Ankündigung eines Errors. Die Konstante wird aber in allen Versionen wie ein String verarbeitet:

    Notice: Use of undefined constant Hallo - assumed 'Hallo' in ...
    Warning: Use of undefined constant Hallo - assumed 'Hallo' (this will throw an Error in a future version of PHP) in ...
    Welt
    

    Ab PHP 8.0 kommt dann, wie seit 5.2 informiert und ab 7.2 versprochen:

    Fatal error: Uncaught Error: Undefined constant "Hallo" in ...
    

    Rolf

    --
    sumpsi - posui - obstruxi