{"id":1297,"date":"2026-05-09T18:00:00","date_gmt":"2026-05-09T17:00:00","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=1297"},"modified":"2026-05-09T18:00:00","modified_gmt":"2026-05-09T17:00:00","slug":"php-8-5s-pipe-operator-is-for-readable-code-not-clever-code","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/","title":{"rendered":"PHP 8.5&#8217;s Pipe Operator Is for Readable Code, Not Clever Code"},"content":{"rendered":"<p>The pipe operator in PHP 8.5 is going to be one of those features people either underuse or overuse. I like it, but only for the boring reason: it can make transformation code read in the order it actually happens. That is useful. Turning every function call into a pipeline because the syntax is new is not.<\/p>\n<p>The <a href=\"https:\/\/www.php.net\/releases\/8.5\/\">PHP 8.5 release notes<\/a> describe <code>|&gt;<\/code> as a way to chain callables left-to-right, and the <a href=\"https:\/\/wiki.php.net\/rfc\/pipe-operator-v3\">pipe operator RFC<\/a> frames it as immediate function composition. The simple example is a slug pipeline: trim a string, replace spaces, strip punctuation, lower-case it. Written as nested calls, that kind of code reads inside-out. Written as a pipeline, it reads like a small recipe.<\/p>\n<p>Where I would use it is in code that already has a clear sequence of transformations. Normalising imported data, preparing text, shaping API input, or passing a value through small named functions are all reasonable fits. Where I would avoid it is business logic with branching, side effects, unclear intermediate state, or callbacks that need long inline closures. At that point the pipe operator is not making the code clearer. It is just making the clever version shorter.<\/p>\n<p>The best PHP features tend to work like this. They give you a cleaner expression for something you were already doing, but they do not remove the need to choose good boundaries. Used carefully, <code>|&gt;<\/code> should make some code easier to scan in review. Used everywhere, it will just create a new style of unreadable PHP.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The PHP 8.5 pipe operator is useful when it makes data transformations read forwards, but it should not become a new way to hide simple code.<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[28,13],"tags":[35,36,146,147],"class_list":["post-1297","post","type-post","status-publish","format-standard","hentry","category-php","category-programming","tag-php","tag-php-8-5","tag-pipe-operator","tag-refactoring"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PHP 8.5&#039;s Pipe Operator Is for Readable Code, Not Clever Code - wade.one<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.5&#039;s Pipe Operator Is for Readable Code, Not Clever Code - wade.one\" \/>\n<meta property=\"og:description\" content=\"The PHP 8.5 pipe operator is useful when it makes data transformations read forwards, but it should not become a new way to hide simple code.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-09T17:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1518\" \/>\n\t<meta property=\"og:image:height\" content=\"1506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"PHP 8.5&#8217;s Pipe Operator Is for Readable Code, Not Clever Code\",\"datePublished\":\"2026-05-09T17:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/\"},\"wordCount\":259,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"keywords\":[\"php\",\"php-8-5\",\"pipe-operator\",\"refactoring\"],\"articleSection\":[\"PHP\",\"Programming\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/\",\"name\":\"PHP 8.5's Pipe Operator Is for Readable Code, Not Clever Code - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2026-05-09T17:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/05\\\/09\\\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP 8.5&#8217;s Pipe Operator Is for Readable Code, Not Clever Code\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP 8.5's Pipe Operator Is for Readable Code, Not Clever Code - wade.one","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:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/","og_locale":"en_GB","og_type":"article","og_title":"PHP 8.5's Pipe Operator Is for Readable Code, Not Clever Code - wade.one","og_description":"The PHP 8.5 pipe operator is useful when it makes data transformations read forwards, but it should not become a new way to hide simple code.","og_url":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/","og_site_name":"wade.one","article_published_time":"2026-05-09T17:00:00+00:00","og_image":[{"width":1518,"height":1506,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/"},"author":{"name":"","@id":""},"headline":"PHP 8.5&#8217;s Pipe Operator Is for Readable Code, Not Clever Code","datePublished":"2026-05-09T17:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/"},"wordCount":259,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"keywords":["php","php-8-5","pipe-operator","refactoring"],"articleSection":["PHP","Programming"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/","url":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/","name":"PHP 8.5's Pipe Operator Is for Readable Code, Not Clever Code - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2026-05-09T17:00:00+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2026\/05\/09\/php-8-5s-pipe-operator-is-for-readable-code-not-clever-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP 8.5&#8217;s Pipe Operator Is for Readable Code, Not Clever Code"}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1152,"url":"https:\/\/wade.one\/blog\/2026\/03\/25\/php-8-5-4-released-upgrade-if-you-re-on-8-5\/","url_meta":{"origin":1297,"position":0},"title":"PHP 8.5.4 Released: Upgrade if You&#8217;re on 8.5","author":"","date":"March 25, 2026","format":false,"excerpt":"PHP 8.5.4 is a bug-fix release, not a feature release. If you are already on PHP 8.5, you should update. If you are still on 8.4, this alone is not the reason to jump.","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1299,"url":"https:\/\/wade.one\/blog\/2026\/05\/11\/php-8-5-nodiscard-is-a-small-api-safety-feature\/","url_meta":{"origin":1297,"position":1},"title":"PHP 8.5 NoDiscard Is a Small API Safety Feature","author":"","date":"May 11, 2026","format":false,"excerpt":"PHP 8.5's NoDiscard attribute gives library and application code a direct way to say that ignoring a return value is probably a bug.","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1300,"url":"https:\/\/wade.one\/blog\/2026\/05\/12\/php-8-5-fatal-error-backtraces-are-an-operations-feature\/","url_meta":{"origin":1297,"position":2},"title":"PHP 8.5 Fatal Error Backtraces Are an Operations Feature","author":"","date":"May 12, 2026","format":false,"excerpt":"PHP 8.5 adding backtraces to fatal errors is a practical production debugging improvement, not just nicer developer output.","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1296,"url":"https:\/\/wade.one\/blog\/2026\/05\/08\/php-8-5s-uri-extension-fixes-a-real-web-problem\/","url_meta":{"origin":1297,"position":3},"title":"PHP 8.5&#8217;s URI Extension Fixes a Real Web Problem","author":"","date":"May 8, 2026","format":false,"excerpt":"PHP 8.5's new URI extension is not flashy, but it gives PHP a better built-in answer for parsing modern URLs.","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1298,"url":"https:\/\/wade.one\/blog\/2026\/05\/10\/php-8-5-clone-with-makes-value-objects-less-annoying\/","url_meta":{"origin":1297,"position":4},"title":"PHP 8.5 Clone With Makes Value Objects Less Annoying","author":"","date":"May 10, 2026","format":false,"excerpt":"PHP 8.5's clone-with syntax makes immutable value objects easier to work with, especially around readonly properties.","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1109,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/php-8-2-vs-7-4\/","url_meta":{"origin":1297,"position":5},"title":"PHP 8.2 vs 7.4","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"PHP is a widely used programming language that has been evolving rapidly in recent years. PHP 8.2 is the latest release, which came out on November 25th, 2021. This version brings several improvements, new features, and bug fixes, making it more efficient and secure than PHP 7.4. In this blog\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=1297"}],"version-history":[{"count":1,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1297\/revisions"}],"predecessor-version":[{"id":1311,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1297\/revisions\/1311"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=1297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=1297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=1297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}