Support » Themes » PHP 8 deprecated constructor

  • Gelöst wolf45

    (@wolf45)


    Hallo,

    mein Theme funktioniert leider mit der PHP Version 8.1 nicht.

    Ich habe auch schon die Ursache für das Problem gefunden, nur an der Lösung scheitert es nocht.

    Ich erhalte folgende Meldung:

    Methods with the same name as their class will not be constructors in a future version of PHP; LoginWidget has a deprecated constructor

    Das betrifft dann also ->

    class LoginWidget extends WP_Widget {
    
    	function LoginWidget() {
    		$widget_ops = array('classname' => 'login', 'description' => __('Login form', THEME_NS));
    		/*$this->WP_Widget(false, __('Login', THEME_NS), $widget_ops); */
    		 $this->__construct(false, __('Login', THEME_NS), $widget_ops);
    	}

    Soweit ich gelesen habe muss man ab PHP 8 __construct() verwenden anstatt wie im Beispiel LoginWidget().

    Das hat bei einer anderen Funktion auch funktioniert, nur bei der oben genannten klappt es nicht.

    Woran könnte das liegen?

    • Dieses Thema wurde geändert vor 1 Monat, 1 Woche von wolf45.
    • Dieses Thema wurde geändert vor 1 Monat, 1 Woche von wolf45.
    • Dieses Thema wurde geändert vor 1 Monat, 1 Woche von wolf45.
Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Wir bieten hier Anwendungssupport (vorausgesetzt, wir erhalten hinreichend Informationen zur Website). Für Programmierfragen ist WordPress Stackexchange besser geeignet.

    PHP-Hinweise (Notice) wie „in a future version of PHP“ sollen auf Probleme aufmerksam machen, die künftig auftauchen könnten. Die Hinweise lassen sich durch Deaktivieren des Debug-Modus in der wp-config.php ausschalten.

    Thread-Starter wolf45

    (@wolf45)

    Einfach ausblenden ist leider keine Lösung, da mein Hoster in wenigen Tagen PHP 7.4 abschaltet. Aber danke für den Link.

    Auch wenn dein Webhoster PHP 7.4 abschaltet (übrigens völlig korrekt, weil die Version nicht mehr mit Sicherheitsupdates versorgt wird) änder das nichts daran, dass ein Hinweis nur ein Hinweis ist. Der macht nur dann Probleme, wenn durch den Hinweis kein (Anmelde-)Cookie gesetzt werden kann. Mit Ausblenden des Hinweis durch define( 'WP_DEBUG', false ); sollte aber selbst das kein Thema sein.

    Die ersten beiden Zeilen deines geteilten Code lauten

    class LoginWidget extends WP_Widget {
      function LoginWidget() {

    und die Fehlermeldung weist darauf hin, dass die Funktion (in einer PHP-Klasse Methode genannt) nicht den gleichen Namen haben soll, wie die Klasse. Das klingt für mich nicht nach einer besonders komplizierten Programmieraufgabe? Da ich aber den restlichen Code nicht kenne, kann ich nicht abschließend beurteilen, ob es z.B. reicht, die Methode umzubenennen.

    Wir möchten hier auch keinen Support zu PHP anbieten. Dafür gibt es besser geeignete Foren.

    Thread-Starter wolf45

    (@wolf45)

    Naja die Seite hat mit PHP 8.1 wegen dem o.g. Grund, mit einer Meldung „eine kritischer Fehler ist aufgetreten“ garnicht funktioniert. Ab der Version 8 wird die Funktion welche vorher noch deprecated war garnicht mehr unterstützt.

    Verstehe. Was sagt denn der Entwickler dazu? Vielleicht gibt’s schon ein Update?

    Der Code-Schnipsel ist isoliert betrachtet wie gesagt schwer einzuordnen, obwohl der Fehler nicht übermäßig komplziert zu sein scheint.

    Thread-Starter wolf45

    (@wolf45)

    Es betrifft ein Theme welches ich vor vielen Jahren mit Aristeer (was ich nicht mehr haben) erstellt hatte.
    Ich kann es also nur selber anpassen.

    Allgemein würde ich mich für ein Theme Generator wie Artisteer nur als kostenfreie open source Software interessieren.

    Moderator Bego Mario Garde

    (@pixolin)

    Ich kann es also nur selber anpassen.

    Dann weißt du ja, was du zu tun hast. 🙂

    Thread-Starter wolf45

    (@wolf45)

    Das hatte ich ja vor, nur meine PHP Kenntnisse ist sehr begrenzt. 😀

    Moderator Bego Mario Garde

    (@pixolin)

    Es gibt Freelancer-Portale, bei denen du für wenig Geld viel Hilfe bekommst.

    bscu

    (@bscu)

    Für einen PHP-Programmierer sollte das keine große Sache sein und somit sollte das auch nicht großartig teuer werden.

    Thread-Starter wolf45

    (@wolf45)

    Danke für die Antworten.

    Ich habe es inzwischen selbst lösen können.

    Zur Vollständigkeit hier meine Umsetzung:

    class LoginWidget extends WP_Widget {
    
    	function __construct() {
    		$widget_ops = array('classname' => 'login', 'description' => __('Login form', THEME_NS));
    		parent::__construct(false, __('Login', THEME_NS), $widget_ops);
    	}
    Moderator Bego Mario Garde

    (@pixolin)

    Prima. Dann spricht nichts dagegen, dass wir den Thread als „gelöst“ markieren? ✔︎

    Thread-Starter wolf45

    (@wolf45)

    Nein da spricht nichts dagegen.

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)