Abstimmung in den PHP Internals über neue Funktion für PHP 8.0

PHP 8.0: Abstimmung über die neue Funktion str_contains
Keine Kommentare

PHP 8.0 soll Ende des Jahres erscheinen. In den PHP Internals wird fleißig über mögliche neue Features diskutiert. Es gibt eine Abstimmung über die mögliche neue Funktion str_contains. Wir haben mit dem Autor des RFC, Philipp Tanlak, gesprochen und spannende Einblicke in die laufenden Diskussionen erhalten.

Eine neue Major-Version für die Programmiersprache PHP zeigt sich schon am Horizont. In den PHP Internals gibt es Abstimmungen über potenzielle neue Features. Eines davon könnte die Funktion str_contains sein. Im Interview mit dem Autor des RFC, Philipp Tanlak, erfahren wir worum es bei diesem Features geht.

str_contains: die neue Funktion für PHP 8.0?

entwickler: In den PHP Internals wird über die Funktion str_contains für PHP 8.0 diskutiert. Kannst du bitte beschreiben worum es da genau geht?

Philipp Tanlak: Die Funktion str_contains ist recht simpel und tut genau das, was man vermuten würde. Sie prüft, ob ein string in einem anderen string vorhanden ist und gibt einen boolean Wert also true oder false zurück, je nachdem, ob die Prüfung erfolgreich war.

Als der RFC zur Diskussion stand, war es vorerst noch unklar, ob es weitere Varianten dieser Funktion geben soll. Speziell eine Variante, die den Vergleich unabhängig von Groß- und Kleinschreibung durchführt und eine andere Variante, die Multi-Byte strings behandelt.
Denn es gibt zu einigen String-Funktionen eine mb_* Variante und eine, die unabhängig von Groß- und Kleinschreibung agiert (Beispiel: strpos -> stripos, strcmp -> stricmp).

Die Funktion str_contains ist recht simpel und tut genau das, was man vermuten würde.

Schlussendlich haben wir uns darauf geeinigt, dass eine mb_* Variante nicht notwendig ist, da die Strings Byte für Byte vergleichen werden und es somit nicht auf die Codierung des Strings ankommt.

Die Groß- und Kleinschreibung unabhängige Variante wurde auch vorerst zurückgestellt, um PHP inkrementell zu erweitern. Der allgemeinen Vermutung nach ist nämlich in der Vergangenheit aus diesem Grund schon ein RFC abgelehnt worden, weil dieser zu viele Varianten einer Funktion auf einmal zu PHP hinzufügen wollte.

entwickler: Wie kam es dazu, diesen RFC zu erstellen?

Philipp Tanlak: Die Idee für diese Funktion ist bei mir aus einem Teil Neugier und einem anderen Teil Frustration entstanden. Ich war gerade daran etwas zu entwickeln, wo so eine Funktion hilfreich gewesen wäre, und wunderte mich, wie schon viele Male, warum es diese Funktion (noch immer) nicht gibt.
Natürlich wusste ich, dass es verschiedene Möglichkeiten gibt, um dieses Verhalten nachzustellen (strpos !== false, strstr).

Um die allgemeine Stimmung der PHP-Community abzuholen, schrieb ich also einen Post auf reddit mit dem Titel: „With so many features added to PHP, why is there no str_contains?“.
Auf diese Frage habe ich viele und teilweise sehr Kontroverse Rückmeldungen erhalten. Die einen schlugen die gängigen Alternativen strpos, strstr, preg_match vor.
Die anderen meinten (sinngemäß): „Wenn es dich stört, dann entwickle diese Funktion doch selbst.“ So war es auch dann und ca. eine Stunde später ging der Pull Request im PHP Respository auf GitHub ein.

International PHP Conference

WordPress for Modern Developers

by Samuel Lev (Determined Development Pty Ltd)

JavaScript Days 2020

Architektur mit JavaScript

mit Golo Roden (the native web)


An dieser Stelle möchte ich kurz erwähnen, dass die Implementierung dieser Funktion das erste Mal war, dass ich überhaupt mit dem PHP Quellcode in Berührung gekommen bin.
Das bedeutete, dass ich mich erst einmal mit dem ganzen Prozess vertraut machen musste, wie man zum PHP Quellcode überhaupt beiträgt. Denn ein einfacher Pull Request auf GitHub ist dafür nicht ausreichend. Die PHP Core Entwickler sind allerdings sehr hilfreich und unterstützten gerne, wenn ich Fragen hatte oder mir etwas unklar war.

Als Nikita Popov dann schrieb: „I’m in favor, but this will need an RFC“, wusste ich, dass es wohl eine ganz gute Idee war, die ich hatte.
Somit habe ich dann den RFC erstellt, welcher gut bei den PHP Core Entwicklern ankam. Auch die Abstimmungsphase, welche nun vom 2. März bis zum 16. März geht, sieht sehr positiv aus.

entwickler: Was würde sich durch das neue Features für die EntwicklerInnen ändern?

Philipp Tanlak: Für die PHP Entwickler ändert vorerst nicht viel, da die neue Funktion erst mit dem Release von PHP 8 kommen wird. Ab dann haben alle Entwickler eine einheitliche und standardisierte Möglichkeit zu prüfen, ob ein String in einem anderen vorhanden ist. Wie schon aus meinem Reddit Post hervorging, ist dies aktuell wohl noch nicht der Fall, da es viele verschiedene Ansätze dafür gibt.

Ein weiterer Punkt ist, dass str_contains weniger fehleranfällig ist und Anfänger sich nun nicht die Dokumentation von strpos oder strstr durchlesen und die speziellen Rückgabewerte merken müssen.

PHP 8.0 – diese neuen Features stehen fest

entwickler: Welche neuen Features für PHP 8.0 stehen bereits fest?

Philipp Tanlak: Da ich bisher noch nicht sehr stark in die Weiterentwicklung von PHP involviert war, kann ich nur grob etwas zu den neuen Features sagen. Features, die allerdings schon für PHP 8 akzeptiert wurden sind u.a.:

  • ::class für Objekte, um den Klassennamen eines Objektes zu erhalten
  • Verbesserte API für das Parsen und Verarbeiten von XML/HTML
  • PHP Exceptions, Errors und Warnings werden überarbeitet und neu klassifiziert
  • Short open tags in PHP Dateien (<? anstelle von <?php) werden nicht mehr unterstützt
  • Das Stringable interface wird automatisch zu Klassen hinzugefügt, die die __toString() Methode implementieren
  • static als Rückgabetyp
  • WeakMap, welche positive Auswirkungen für ORMs und den garbage collector haben werden
  • Union Typen (z. B. int|float)
  • Der ternary operator ($var ? true : false) wird angepasst, sodass er sich konsistent zu vielen anderen Programmiersprachen verhält
  • JIT Compiler, welcher große mathematische Operationen sehr beschleunigen wird

Aktuell werden noch viele weitere Themen diskutiert, die vermutlich zu PHP 8 hinzukommen werden.

entwickler: Welches Feature für PHP 8.0 ist dein persönliches Highlight?

Philipp Tanlak: Mein persönliches Highlight ist die Überarbeitung von Exceptions, Errors und Warnings, da sie weniger Spielraum für Fehler lassen und die Anwendung dadurch stabiler und fehlerfreier wird. Zur Zeit gibt es noch einige Fälle beim Programmieren, wo ein Entwickler eigentlich einen Fehler zu erwarten hätte, es allerdings keinen gibt und somit mit fehlerhaften Daten weitergearbeitet wird.

entwickler: Über welche Features und Anpassungen für PHP 8.0 wird noch in den PHP Internals diskutiert?

Philipp Tanlak: Abgesehen von den Features die schon für PHP 8 bestätigt sind werden weiter Änderungen oder neue Features in den PHP Internals vorgeschlagen. Auf der Seite bekommt man einen detaillierten Einblick zu ihnen. Hier sind alle Mails aus der Mailing list der PHP Internals einsehbar.

Eine Idee, ist es die Sortierfunktionen in PHP stabil zu machen. Den aktuell sind sie es leider nicht. Elemente die von einem stabilen Sortieralgorithmus sortiert werden behalten die originale Reihenfolge, wenn es mehrere Elemente mit dem gleichen Wert gibt. Dies kann ein instabiler Sortieralgorithmus nicht garantieren.

Eine weitere Idee ist es standardisierte Server-Side Request und Response Objekte zu PHP hinzuzufügen, welche aktuell von Frameworks wie Laravel oder Symfony selbst implementiert werden. Hierzu gibt es auch schon einen RFC.

Es werden weiter Änderungen oder neue Features in den PHP Internals vorgeschlagen.

Weiterhin gibt es noch einen Vorschlag für „Write-Once Properties“, wie es sie z. B. in Dart mit dem Keyword „final“ gibt. Also eine Variable, die nur einmal gesetzt werden kann.

Es gibt noch Weiteres und es wird vermutlich immer mehr hinzukommen. Diese drei Sachen finde ich jedoch am interessantesten.

Wann kommt PHP 8.0?

entwickler: Ein kleiner Hinweise: Kannst du uns eine Prognose geben, wann PHP 8.0 erscheinen wird? 

PHP 8 ist für das Ende des Jahres 2020 angekündigt. Bis dahin ist also noch genügend Zeit, um die Programmiersprache weiterzuentwickeln.

Abschließend würde ich gerne noch jeden ermutigen, der zu PHP oder im Allgemeinen etwas beitragen möchte, es einfach zu versuchen. Meinen Erfahrungen nach ist jeder herzlich willkommen etwas mitzugestalten. Sollte der/die ein oder andere nun auf etwas aufmerksam werden, was er/sie gerne in einem Projekt haben möchte, lohnt es sich auf jeden Fall es anzusprechen.
Wenn dann noch die nötige Erfahrung vorhanden ist, es selbst zu implementieren, stehen die Chancen recht gut, dass die Änderung auch in ein Projekt mit einfließt.

entwickler: Vielen Dank für das Interview!

Im Interview: Philipp Tanlak (Web Developer)
Philipp Tanlak ist Web-Developer (Frontend & Backend) in einem mittelständischen Unternehmen in Ostwestfalen. Dort arbeitet wer primär mit PHP, HTML/CSS/JS und gängigen Frameworks wie Laravel, Magento 2 oder Vue.js. In seiner Freizeit entwickelt er sehr gerne in Go.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -