Die Ausgangslage
Für WordPress-Code verwendet man häufig so genannte Callables, also Konstrukte, um Methoden einer Klasse aufzurufen, zb so:
Darüber haben wir hier schon etwas ausführlicher geschrieben:
https://wp-entwickler.at/3189/callables-in-php-oder-wie-man-klassen-und-methoden-funktionen-aufrufen-kann/
Im Code kann man also auf diesem Wege eine statische Methode aufrufen:
Self und Php 8.2
Das „self“ in dieser Notierung wird ab PHP 8.2 zum Problem!
Auf der offiziellen PHP-Seite ist folgendes zu lesen:
(Wer sich tiefer einlesen will kann sich hier das ursprüngliche RFC zu Gemüte führen: https://wiki.php.net/rfc/deprecate_partially_supported_callables )
Ab PHP 8.2. wird eine Warnung geworfen:
Und geplant ist ab PHP 9, dass PHP einen Fehler wirft und damit den Programmablauf abbricht.
Umfangreiche Ausführungen zum Thema & Exkurs: Hach Gutenberg…
Wer sich genauer in die Thematik einlesen will, kann das in einem gut aufbereitetem Git-Issue machen.
Das Issue ist wirklich lesenswert für interessierte PHP-Entwickler.
Leider zeichnet das Issue aber auch das übliche Bild, wenn es um die Entwicklung von Gutenberg, bzw den WordPress-Blocks, geht:
Es ist Sand im Getriebe – um es milde zu formulieren. Genauer möchte ich hier im Blog nicht darauf eingehen. Wer hier fleißig mitliest weiß um unsere Kritik am Blockeditor.
Mir fällt bei solch trivialen Programmierer-Fehlern dann immer dieses Meme ein, und es passt einfach zu gut:
Aber hey, es ist ein normaler Prozess, dass sich Dinge ändern. Man kann nicht alles perfekt machen.
Mit jedem Versionssprung gibt es Anpassungsdruck, das ist 100% normal und es trifft auch andere wie hier https://github.com/aws/aws-sdk-php/issues/2467 oder hier https://www.drupal.org/project/unused_modules/issues/3404077
Die Lösung? zb self::class
Statt einem String übergibt man nun die Klassen-Referenz!
Eine Möglichkeit wäre also self::class zu notieren, aber nicht in Anführungszeichen!
Es wird hier reine Referenz notiert und nicht der String. In der ersten Zeile sieht man die Lösung, in der zweiten das Problem :)