Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:121508 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 12456 invoked from network); 29 Oct 2023 18:31:19 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 29 Oct 2023 18:31:19 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id C9D42180212 for ; Sun, 29 Oct 2023 11:31:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-ot1-f44.google.com (mail-ot1-f44.google.com [209.85.210.44]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Sun, 29 Oct 2023 11:31:14 -0700 (PDT) Received: by mail-ot1-f44.google.com with SMTP id 46e09a7af769-6ce2b6b3cb6so2655619a34.3 for ; Sun, 29 Oct 2023 11:31:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698604273; x=1699209073; darn=lists.php.net; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=SGZ9H8GwXUQR2RBJDDC1nge0H90dr5K8BRfOcpeouxM=; b=T9jeXNRItGO4kLGuX0B/3tuglLdGv+Dwdz4CmUaa6Dcbi+w/9IPSMWzsCkOMdnASLb l4A6uqDLYNuyo58yhyrYonkyE4Qvn2Qzg04zQfRV26eVIV9rOzZyfT6bwRW383HoBGAv wwIQ1qKn+M84EtJSA9LHhE9eoVs9NuIOvCjTTvqgsBFoayezid50pejBGnKiSdUmygap tjA0vGpMHTSRNvYfXlWGA/pjpIsOoRrvf5Q4Z1l7jqANcAyUDVieQR60r9N/St/B/Ag3 0IqqovkeaIE2j7REyJ2gsxrfPgiGBV+pHPjRYsMt4u67yLloDIoiUgLKfm+jOg18asYR RmAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698604273; x=1699209073; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=SGZ9H8GwXUQR2RBJDDC1nge0H90dr5K8BRfOcpeouxM=; b=wGLNeO5V35QzGvsqldY/dJq36MdGRxtfz14FeQV3Bg511MsPOF0Ax2o0qLTr8UAl7n ifMWHzPCHjcm5u9M/3mDTMvTGFD6eY86wXeds3xMrltOIQPUhdbBoUr5LqA+hL8pSaLi 3kiPqneJBh483p0rwcq78DADkOdh5QCb2SAgZxsC2rR9rkefXN95EuWhqcwS4JRO2vlQ qqEhxr9svOPQ/CK1soDaVxrr2fucXei8nyewCQS84JQ2XPfp5lVfdaZIwDjC3AVHyrqv /kGzOOqUwYcHoDXPH9vEQYfqfG0w5yyl4SP7N3xT+h5IGZYAV6jOG0ZhxFKGhk5ix7bI krrg== X-Gm-Message-State: AOJu0Yw2Qk0POMzFNz7wZaAWSgoxZLDgEgqJ3rrQIW0GvQ2Ap85ZNeV2 NttCT76Fcf2pBZpaDj9nOBHc63iCFi0Q6zwv/S0XvBVX9M+MmF4r X-Google-Smtp-Source: AGHT+IF5lGpoU+0LNFFCCGkkxAAQY2Lo7gmlx2SL9c9jRMj9DamDFyArljCuZx/fLbbHnC/2KK5J77IYff7BwGf+7fw= X-Received: by 2002:a05:6830:3499:b0:6bd:152f:990e with SMTP id c25-20020a056830349900b006bd152f990emr11361909otu.5.1698604273423; Sun, 29 Oct 2023 11:31:13 -0700 (PDT) MIME-Version: 1.0 Date: Sun, 29 Oct 2023 19:31:01 +0100 Message-ID: To: internals Content-Type: text/plain; charset="UTF-8" Subject: Discussion - Anti-null coercion From: landers.robert@gmail.com (Robert Landers) Hello Internals, We currently have a null coercion operator: ??, but we lack an anti-null coercion operator. For example, if I wanted to operate on a header, if-and-only-if it exists, I'd have to write something like this one-liner: fn() => ($_SERVER['HTTP_X_MY_HEADER'] ?? null) ? md5($_SERVER['HTTP_X_MY_HEADER']) : null; Or something like this: function() { if(!empty($_SERVER['HTTP_X_MY_HEADER']) { return md5($_SERVER['HTTP_X_MY_HEADER']); } return null; } This is rather tedious when you have to do it, so, I'd like to discuss adding a new "anti-null coercion" operator: ?! This would collapse the previous verbose code into: fn() => $_SERVER['HTTP_X_MY_HEADER'] ?! md5($_SERVER['HTTP_X_MY_HEADER']; When it is null, it will stay null, thus the above is the same as: fn() => $_SERVER['HTTP_X_MY_HEADER'] ?! md5($_SERVER['HTTP_X_MY_HEADER'] ?? null; It would have a lower precedence than ?? so that the above line would read from left to right without requiring parenthesis/brackets. The operator would only return the right-hand side if the left-hand side exists (aka, not null), otherwise, it would return null. I'm not particularly attached to the ?! syntax (since it does, in fact, look very similar to ?:), so perhaps focusing on the merits of the idea first, then bikeshedding the syntax later would be a good approach? Thoughts? Robert Landers Software Engineer Utrecht NL