{"id":4495,"date":"2025-10-21T14:44:20","date_gmt":"2025-10-21T12:44:20","guid":{"rendered":"https:\/\/vielhuber.de\/?p=4495"},"modified":"2025-10-21T15:03:24","modified_gmt":"2025-10-21T13:03:24","slug":"walrus-operator-in-php","status":"publish","type":"post","link":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/","title":{"rendered":"Walrus-Operator in PHP"},"content":{"rendered":"\n<p>Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (<code>:=<\/code>) via <a href=\"https:\/\/peps.python.org\/pep-0572\/\" target=\"_blank\" rel=\"noreferrer noopener\">PEP 572<\/a> ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der Programmiersprache aus. Die Debatte war so erbittert, dass Python-Erfinder <a href=\"https:\/\/de.wikipedia.org\/wiki\/Guido_van_Rossum\" target=\"_blank\" rel=\"noreferrer noopener\">Guido van Rossum<\/a> im Juli 2018 \u2013 noch vor dem Release \u2013 seine Position als BDFL (<strong>Benevolent Dictator For Life<\/strong>) niederlegte. Seit Anfang 2019 wird Python stattdessen von einem gew\u00e4hlten Steering Council gef\u00fchrt.<\/p>\n\n\n\n<!--more-->\n\n\n\n<pre class=\"wp-block-code\"><code>if (n := len(items)) > 10:\n&nbsp;&nbsp;&nbsp;&nbsp;print(f\"List is too long ({n} elements)\")<\/code><\/pre>\n\n\n\n<p>Die Governance-Z\u00e4sur entstand unmittelbar im Nachgang zur Walrus-Diskussion \u2013 ein seltener Fall, in dem ein einzelnes Sprachfeature strukturelle Konsequenzen hatte. In seiner Stellungnahme erkl\u00e4rte van Rossum: \u201eDer Tropfen, der das Fass zum \u00dcberlaufen brachte, war ein sehr kontroverses Python Enhancement Proposal. Nachdem ich es akzeptiert hatte, gingen Leute auf Social Media wie Twitter und sagten Dinge, die mich pers\u00f6nlich sehr verletzt haben\u201c.<\/p>\n\n\n\n<p>Weiter f\u00fchrte er aus: \u201eJetzt, da PEP 572 erledigt ist, m\u00f6chte ich niemals wieder so hart f\u00fcr ein PEP k\u00e4mpfen m\u00fcssen und dabei feststellen, dass so viele Menschen meine Entscheidungen verabscheuen. Ich m\u00f6chte mich vollst\u00e4ndig aus dem Entscheidungsprozess zur\u00fcckziehen.\u201c Die Kritik kam nicht nur von der breiten Community, sondern auch von Core-Entwicklern.<\/p>\n\n\n\n<p>Diese argumentierten, der Operator widerspreche fundamentalen Python-Prinzipien aus dem <a href=\"https:\/\/peps.python.org\/pep-0020\/\" target=\"_blank\" rel=\"noreferrer noopener\">Zen of Python<\/a> \u2013 insbesondere der Pr\u00e4ferenz f\u00fcr Einfachheit \u00fcber Komplexit\u00e4t. Nach fast drei Jahrzehnten als unangefochtener Sprachgestalter war dies das Ende einer \u00c4ra. Doch w\u00e4hrend Python einen neuen Walrus-Operator einf\u00fchren musste und dabei seine Community spaltete, stellt sich die Frage: Wie handhaben andere Sprachen \u00e4hnliche Konzepte?<\/p>\n\n\n\n<p>Den Python-Operator <code>:=<\/code> (Assignment Expression alias \u201eWalrus\u201c, zu Deutsch \u201e\u201c \u201eWalross\u201c) gibt es in PHP nicht \u2013 denn er wird auch nicht gebraucht. In PHP ist der Zuweisungsoperator <code>=<\/code> schon immer <a href=\"https:\/\/www.php.net\/manual\/en\/language.operators.assignment.php\" target=\"_blank\" rel=\"noreferrer noopener\">Statement und Ausdruck zugleich<\/a>: Eine Zuweisung liefert den zugewiesenen Wert zur\u00fcck. Genau deshalb funktionieren idiomatische Muster wie \u201eassign-and-test\u201c in <code>if<\/code>-Bedingungen ohne eigenes Sprachfeature.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function get_some_field() {\n&nbsp;&nbsp;&nbsp;&nbsp;return 'foo';\n}\nif ($a = get_some_field()) {\n&nbsp;&nbsp;&nbsp;&nbsp;echo $a; \/\/ foo\n}\n\/\/ Hinweis: $a ist *gesetzt*, selbst wenn die Bedingung falsy w\u00e4re.<\/code><\/pre>\n\n\n\n<p><code>$a = get_some_field()<\/code> weist zu und wertet zur rechten Seite aus. Ist diese \u201etruthy\u201c, betritt man den <code>if<\/code>-Block. Zum Hintergrund: In Python wurde <code>:=<\/code> (PEP 572) eingef\u00fchrt, weil dort einfache Zuweisungen keine Ausdr\u00fccke sind. In PHP ist das seit jeher anders, daher existiert kein gleichwertiger Bedarf. Zwei Dinge f\u00fchren h\u00e4ufig zu Bugs: <code>=<\/code> (Zuweisung) hat eine niedrigere Priorit\u00e4t als die meisten Vergleichsoperatoren; Klammern bestimmen die Auswertung.<\/p>\n\n\n\n<p>In komplexeren Ausdr\u00fccken sollte man immer klammern, um Lesbarkeit und Eindeutigkeit zu erh\u00f6hen. <code>??<\/code> hat eine eigene, eher niedrige Priorit\u00e4t. Das erkl\u00e4rt \u00dcberraschungen in Ausdr\u00fccken wie <code>$x ?? null === null<\/code>. Ohne Klammern wird zuerst <code>null === null<\/code> ausgewertet. Besser sollte man immer explizit klammern: <code>($x ?? null) === null<\/code>. <code>$a<\/code> existiert auch au\u00dferhalb des <code>if<\/code>-Blocks \u2013 ggf. mit einem falsy Wert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function get_some_field() {\n&nbsp;&nbsp;&nbsp;&nbsp;return 'bar';\n}\nif ( ($a = get_some_field()) === 'bar' ) {\n&nbsp;&nbsp;&nbsp;&nbsp;echo $a; \/\/ bar\n}<\/code><\/pre>\n\n\n\n<p>So ist klar, dass <code>=== 'bar'<\/code> auf den zugewiesenen Wert angewendet wird. Klammern sind hier wichtig f\u00fcr Lesbarkeit und Priorit\u00e4t. In der Praxis vermeidet dieses Muster unn\u00f6tige doppelte Aufrufe (z.B. des Query-Builders), indem das Ergebnis der Abfrage gespeichert und dann gepr\u00fcft wird. In produktiven Anwendungen, wie Laravel-basierten Projekten, kann man folgendes Pattern h\u00e4ufiger beobachten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if ( ($foo = Foo::where('foo', 'bar')) &amp;&amp; $foo->count() > 0 ) {\n&nbsp;&nbsp;&nbsp;&nbsp;dd($foo->get());\n}<\/code><\/pre>\n\n\n\n<p><code>&amp;&amp;<\/code> ist kurzschlie\u00dfend: Der rechte Teil wird nur ausgewertet, wenn der linke truthy ist. Durch das vorgeschaltete Zuweisen vermeidet man eine Zuweisung au\u00dferhalb der if-Abfrage. Ob das ein guter Stil ist, h\u00e4ngt von eurem Team-Kodex und Analysetools ab; semantisch ist es korrekt. Zumindest sollte man wissen, was der Code tut, wenn man in freier Wildbahn darauf st\u00f6\u00dft.<\/p>\n\n\n\n<p>PHP braucht also keinen \u201eWalrus-Operator\u201c, weil Zuweisungen bereits Ausdr\u00fccke sind. Das macht idiomatische Muster wie \u201eassign-and-test\u201c m\u00f6glich \u2013 performant und knapp. Gleichzeitig steigen die Anforderungen an Disziplin: Klammern, strikte Vergleiche, Bewusstsein f\u00fcr truthy\/falsy und klare Teamkonventionen sind Pflicht. Wer diese Leitplanken beachtet, bekommt die Vorteile der Walrus-Idee ohne ein weiteres Sprachfeature.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der Programmiersprache aus. Die Debatte war so erbittert, dass Python-Erfinder Guido van Rossum im Juli 2018 \u2013 noch vor dem Release \u2013 seine Position als BDFL (Benevolent Dictator For Life) niederlegte. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"gtbabel_prevent_lngs":"","gtbabel_alt_lng":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-4495","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-blog"},"acf":[],"yoast_head":"<title>Walrus-Operator in PHP &#060; Vielhuber David<\/title>\n<meta name=\"description\" content=\"Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Walrus-Operator in PHP &#060; Vielhuber David\" \/>\n<meta property=\"og:description\" content=\"Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/\" \/>\n<meta property=\"og:site_name\" content=\"Vielhuber David\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-21T12:44:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-21T13:03:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"552\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:site\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"David\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/\"},\"author\":{\"name\":\"David\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"headline\":\"Walrus-Operator in PHP\",\"datePublished\":\"2025-10-21T12:44:20+00:00\",\"dateModified\":\"2025-10-21T13:03:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/\"},\"wordCount\":589,\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"articleSection\":[\"Blog\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/\",\"name\":\"Walrus-Operator in PHP &#060; Vielhuber David\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\"},\"datePublished\":\"2025-10-21T12:44:20+00:00\",\"dateModified\":\"2025-10-21T13:03:24+00:00\",\"description\":\"Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/walrus-operator-in-php\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vielhuber.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Walrus-Operator in PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/\",\"name\":\"Vielhuber David\",\"description\":\"Full-Stack Developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vielhuber.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\",\"name\":\"David\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"width\":700,\"height\":552,\"caption\":\"David\"},\"logo\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/vielhuber\"]}]}<\/script>","yoast_head_json":{"title":"Walrus-Operator in PHP &#060; Vielhuber David","description":"Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/","og_locale":"de_DE","og_type":"article","og_title":"Walrus-Operator in PHP &#060; Vielhuber David","og_description":"Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der","og_url":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/","og_site_name":"Vielhuber David","article_published_time":"2025-10-21T12:44:20+00:00","article_modified_time":"2025-10-21T13:03:24+00:00","og_image":[{"width":700,"height":552,"url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","type":"image\/jpeg"}],"author":"David","twitter_card":"summary_large_image","twitter_creator":"@vielhuber","twitter_site":"@vielhuber","twitter_misc":{"Verfasst von":"David","Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/#article","isPartOf":{"@id":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/"},"author":{"name":"David","@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"headline":"Walrus-Operator in PHP","datePublished":"2025-10-21T12:44:20+00:00","dateModified":"2025-10-21T13:03:24+00:00","mainEntityOfPage":{"@id":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/"},"wordCount":589,"publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"articleSection":["Blog"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/","url":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/","name":"Walrus-Operator in PHP &#060; Vielhuber David","isPartOf":{"@id":"https:\/\/vielhuber.de\/#website"},"datePublished":"2025-10-21T12:44:20+00:00","dateModified":"2025-10-21T13:03:24+00:00","description":"Im Oktober 2019 f\u00fchrte Python 3.8 den Walrus-Operator (:=) via PEP 572 ein \u2013 und l\u00f6ste damit eine der gr\u00f6\u00dften Kontroversen in der Geschichte der","breadcrumb":{"@id":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vielhuber.de\/blog\/walrus-operator-in-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vielhuber.de\/"},{"@type":"ListItem","position":2,"name":"Walrus-Operator in PHP"}]},{"@type":"WebSite","@id":"https:\/\/vielhuber.de\/#website","url":"https:\/\/vielhuber.de\/","name":"Vielhuber David","description":"Full-Stack Developer","publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vielhuber.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef","name":"David","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","contentUrl":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","width":700,"height":552,"caption":"David"},"logo":{"@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg"},"sameAs":["https:\/\/x.com\/vielhuber"]}]}},"_links":{"self":[{"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/posts\/4495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/comments?post=4495"}],"version-history":[{"count":10,"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/posts\/4495\/revisions"}],"predecessor-version":[{"id":4510,"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/posts\/4495\/revisions\/4510"}],"wp:attachment":[{"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/media?parent=4495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/categories?post=4495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vielhuber.de\/sq\/wp-json\/wp\/v2\/tags?post=4495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}