pl: PHP Deprecated: Assigning the return value of new by reference

Diese Meldung erscheint wenn ich template.php einbinde und zeigt auf Zeilen in dieser Klasse.

Komischerweise bekomme ich diese Meldung nicht, wenn ich selbst in meinem Code

$tt =& new Template('names.txt');

eine Zuweisung per Referenz vornehme. Warum da die Meldung nicht erscheint, verstehe ich nicht. Abgesehen davon ,daß PHPv5 Objekte grundsätzlich per Ref assigned was das & überflüssig macht, hätte ich doch gene gewusst warum bez. meiner Anweisung keine FM kommt. MFG

  1. Tach!

    Komischerweise bekomme ich diese Meldung nicht, wenn ich selbst in meinem Code

    $tt =& new Template('names.txt');
    

    eine Zuweisung per Referenz vornehme.

    Der Code ist seit Version 7 ein Syntaxfehler.

    Wenn weder ein Parse error noch eine Deprecated-Meldung erscheint, könnte es daran liegen, dass deine PHP-Version noch keine 5.3 ist.

    Zum Nachvollziehen kann man mit nachfolgendem Code die PHP Sandbox befüllen und die Versionen durchschalten.

    <?php
    $o =& new stdClass;
    

    dedlfix.

    1. hi,

      Zum Nachvollziehen kann man mit nachfolgendem Code die PHP Sandbox befüllen und die Versionen durchschalten.

      Nicht schlecht diese Box. Na, ich werd' das Modul mal überarbeiten. Da gibts sowieso einiges zu verbessern .

      MFG

  2. Hallo pl,

    ich hatte eine Hypothese, aber das war's nicht. An sowas wie diesem Müll hier:

    class Foo
    {
        public $x;
        function  &__construct($x) {
            $this->x = $x;
            return $this;
        }
    }
    
    $a = new Foo(7);
    echo $a->x;
    

    liegt's nicht (ein Konstruktur, der ein Return-per-Reference macht). Wird aber selbst von PHP 7.4 noch durchgelassen.

    Also - was ist das für ein template.php und welche PHP Version fährst Du?

    Rolf

    --
    sumpsi - posui - clusi
    1. template.php und ich habe v5.3

      MFG

      1. template.php und ich habe v5.3

        Ah Sourceforge, das Hospiz, der Friedhof und das Musuem für ausgestorbene Projekte. Die letzte Änderung an PHP-HTML::Template stammt von 2002.

        Die PHP Version wird seit 2014 offiziell nicht mehr unterstützt. Just sayin'.

        1. Hallo 1unitedpower,

          Ah Sourceforge, das Hospiz, der Friedhof und das Musuem für ausgestorbene Projekte.

          Ah bah, bestimmt nicht 😉:

          This Week: 16,646,855Downloads 92,204Code Commits

          Das hier ist viel eher ein Problem...

          Rolf

          --
          sumpsi - posui - clusi
        2. Ein Framework muss von der Version der darunterliegenden Programmiersprache weitgehend unabhängig sein. Dieser Grundsatz ergibt sich allein schon aus der Idee die eine Templating Engine einschließt welche ein Framework sogar von der Progrmmiersprache unabhängig macht.

          Da mögen sich manche darüber lustig machen, daß ich Text::Query in einer Version aus dem vorigen Jahrtausend für meine Volltextsuche einsetze, unterdessen gibt es bis heute nichts Vergleichbares. Und dieses Modul unterstützt sogar UTF-8.

          MFG

          1. Hallo pl,

            Ein Framework muss von der Version der darunterliegenden Programmiersprache weitgehend unabhängig sein.

            Genau. Und das bist Du nicht. Derzeit entwickelst und testest Du für PHP 5.3 und weißt nicht, was bei höheren Versionen passiert. Wenn dein Framework auf allen PHP Versionen von 5.3 bis zum aktuellen PHP läuft (7.4), dann ist es versionsunabhängig.

            Mit wäre dieser Anspruch allerdings zu hoch. Man kann es machen, aber muss dann für 5.3 wissen, was geht, und für aktuell 9 Folgeversionen wissen, was alles geändert wurde und vermieden werden muss, damit es mit neuen Versionen immer noch geht. Hinzu kommt, dass seit 7.0 einiges geht wovon man unter 5.3 noch geträumt hat.

            • 5.4: Traits und Short Arrays [ 1,2,3 ]
            • 5.5: Generatoren (yield) und finally bei try/catch
            • 5.6: Variadische Funktionen mit Rest-Operator (function x($a, ...$rest))
            • 7.0: Typdeklarationen, Nullcoalescing, Spaceship

            7.0 als Sockelversion wäre mir hinreichend. Die hatte Anfang diesen Jahres auch schon ihr End-of-Life, und die 7.1 vor 3 Wochen. Grundsätzlich bringt PHP jährlich eine neue Minor Version und pflegt ältere Versionen 2+1 Jahre lang. Danach bleiben sie liegen. Das ist in Perl seit 5.12 ja nicht anders.

            Du solltest Dir definitiv PHP 7 anschauen und gucken, in wie weit diese uralte Template-Lib dorthin gerettet werden kann.

            Rolf

            --
            sumpsi - posui - clusi
            1. Hallo!

              Ein Framework muss von der Version der darunterliegenden Programmiersprache weitgehend unabhängig sein.

              Genau. Und das bist Du nicht. Derzeit entwickelst und testest Du für PHP 5.3 und weißt nicht, was bei höheren Versionen passiert.

              Doch das weiß ich sehr genau. Das kann ich nämlich bei meinem Provider einstellen.

              Wenn dein Framework auf allen PHP Versionen von 5.3 bis zum aktuellen PHP läuft (7.4), dann ist es versionsunabhängig.

              Das isses auch!

              Mit wäre dieser Anspruch allerdings zu hoch.

              Ein solcher Anspruch erwächst aus einer Idee in der die Version überhaupt gar keine Rolle spielt.

              Du solltest Dir definitiv PHP 7 anschauen und gucken, in wie weit diese uralte Template-Lib dorthin gerettet werden kann.

              S.o. Die läuft auch unter v7. Deprecated Codefragments hab ich bereinigt. Siehe Plog.

              MFG

              1. Hallo pl,

                ok, das war mir so nicht klar. Aus anderen Posts schien es mir, als säßest Du gemütlich bei PHP 5.3 und wolltest da gar nimmer weg.

                Idee in der die Version überhaupt gar keine Rolle spielt

                Naja, ein bisschen immer. Eine Mindestversion brauchst Du, sicherlich willst Du dein Framework nicht auch unter FI (a.k.a. PHP 2.0) laufen lassen können. Und es wird Dir auch bei höchster Aufmerksamkeit immer wieder passieren können, dass Features auf einmal deprecated oder entfernt werden. PHP ist leider so.

                Deprecated Codefragments hab ich bereinigt

                Top! Dann kannst Du ja nun Version beta0.5 veröffentlichen 😂

                Rolf

                --
                sumpsi - posui - clusi
            2. Btw.:

              Ein Trait wird benutzt um eine Menge an Methoden in mehreren voneinander unabhängigen Klassen zu benutzen. (Wiki)

              Sowas kann man auch in PHPv5.3 umsetzen. Genauso wie man ein Interface mit einer einer einfachen Klasse implementieren kann ohne das Schlüsselwort interface dafür benutzen zu müssen.

              Meine PHP Traits sind genauso aufgebaut wie meine Perl Traits und genauso werden die auch verwendet.

              Und Variadische Funktionen braucht man in OOP nicht unbedingt.

              MFG

      2. Hallo pl,

        Your download will start shortly... (5)

        keine Ahnung was die Burschen bei Sourceforge da treiben, aber wenn ich downloaden will bleibt der (mutmaßliche) Zähler auf 5 stehen. In der Chrome-Konsole stehen ein paar Hinweise auf 2 .js und ein .gif File, die Chrome sich zu laden weigert (Status: blocked:other), mehr sagt er nicht. Fuchs und IE11 laden brav...

        Jedoch...

        PHP 5 was released in July 2004 after long development and several pre-releases

        vs

        A template system for PHP based on HTML::Template Perl Module
        Version 0.3.3
        14-NOV-2002

        17 Jahre alt, aus Zeiten von PHP 4, im Beta-Status aufgegebenes Projekt. Huiuiui. Wenn Du eine TE suchst die unter PHP und Perl läuft, guck Dir mal {{mustache}} an (war mein erster Googletreffer zu Template Perl PHP).

        Ich finde im Source von template.php tatsächlich Zuweisungen der missbilligten Art ($foo =& new Bar()), z.B. in Zeile 363. Du kannst versuchen, die & in =& new zu entfernen. Die Gefahr ist aber, dass es nicht funktionier. template.php wurde mit PHP 4 geschrieben und wenn es vor Einführung von PHP 5 vom Autor aufgegeben wurde, befürchte ich, dass der Versionssprung zu Inkompatibilitäten führte.

        Eine Erklärung, warum PHP die Zuweisung in template moniert und in deinem Code nicht, ist das natürlich nicht. Ich mag mir jetzt aber auch keinen PHP 5.3 Zombie suchen und es ausprobieren.

        Rolf

        --
        sumpsi - posui - clusi
        1. Ich bleibe bei HTML::Template. Dafür habe ich schon immer meine Templates die somit unter PHP, Perl und C kompatibel sind. Und auch die PHP Variante für diese TE läuft unter v5.3 nun fehlerfrei.

          MFG

          1. Hallo pl,

            dann ist gut.

            "Works for me" (im Sinne von: tut auf meinem Server und für meine Anwender was es soll) ist schließlich die Hauptsache.

            Rolf

            --
            sumpsi - posui - clusi
            1. Die Vefügbarkeit von HTML::Template für PHP hat mich überhaupt dzu bewegt, die Entwicklung meines Framework für PHP wiederaufzunehmen. Die Idee und der grunsätliche Aufbau ist in PHP derselbe wie in Perl nur im Detail der PL entsprechend umgesetzt.

              Mein Ziel war es auch immer, die Systemanfoderungen so klein wie möglich zu machen. So läuft mein FW unter Perlv5.6 und PHPv5.3, also OOP muss es schon sein. Schon ersaunlich, was mit PHPv5.3 alles geht, da gibts die GD Library und sowas hier kann ich mit Perl nicht machen. Ebensowenig hab ich mit dem Perl was mein Provider mir bietet nicht die Möglichkeit XML zu parsen, PHP hingegen kann das.

              Und genau das ist auch eine der Grundideen zu meinem FW; was mit der einen PL nicht zu machen ist, mach ich halt mit einer anderen PL. Die Seiten fügen sich nahtlos ineinander, also denen sieht man es nicht an ob sie mit Perl oder PHP erstellt sind.

              Und ja, ich mach das nur für mich. Ist doch schön was zu haben an dem man täglich seine Freude hat.

              MFG