Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:130725 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by lists.php.net (Postfix) with ESMTPS id C3B271A00BC for ; Fri, 1 May 2026 09:37:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1777628281; bh=YhPgHxXLnJ7r1TGFZUi+c1ocwlFGy6tGhNoTeoAHLpc=; h=From:Date:Subject:To:From; b=HJ7PkfufJMd+IBTI+pcHHR0aRIZtNmochWmOYFURv1eKpfMsX0bGMVd37h00Ts/rB TzOpdrjLIEh/pFYlvnFs3qh+3SLkCft67ffpBMnF7g9gcnxoCM7Y+yjDZQR9Rc4XdU DXimSGvWPkMDUVYqIjhjgofOevk8cIRneSDU5PfzxAbWld/T8hbBCrmogRFq7ZuLwr xm38ao/1XPkWgMEv8QpI6k5oS7zCHGPgl1VA0CrPns8RnY2SXNPHjU3fV6O34grcni SxqF9z5U2TQJYnAe8ZqrEkg2UD9ju4FH9x+zLQrm7WxTtlHr/n7bW9nCagpnYn5X6q DtH0+LZxjJflw== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 9F5B9180061 for ; Fri, 1 May 2026 09:38:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: No X-Envelope-From: Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Fri, 1 May 2026 09:38:00 +0000 (UTC) Received: by mail-qk1-f180.google.com with SMTP id af79cd13be357-8d736211595so122098485a.0 for ; Fri, 01 May 2026 02:37:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777628274; cv=none; d=google.com; s=arc-20240605; b=k6v2SDZCZG+IhI7BiOK0qeXFZwH+DUg64RBZG3MAYzwHISrM4r0076P4Uy1HJ7jVHj Gs+iaRyqNjPTFMPCtymb5egF6uhJGFsmvTcfiqa7IBSAFF0yt5kc2sq5bXeYcLt/cFNA 30YrKPHsHqkwRbe5syfYhWRfooniXU28yf2ojFLjQLKUDEn5QWkaEFwfZwbq2hUcmKi0 6GeDLmhQWJk8MN6dOsOO7zQIZTLTfQBQ94wZfw6xoTkBbhU1lGQ5qQeQZe1cTzAeuj9X Jg55sxeBadu4OCZ0TNpNOQsBNXEKZjCQG5kpN82EGUCRZVTc2gjmCDa99uQEOrCVpH85 Pfpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=wRudOk/KGJZjBPyM6prY6z4FSvaoHhWLAPPlHb39/ps=; fh=RFBKMNwdsUBkXmmb8AAjYIg7L3EzMrZygiLbMB7seK8=; b=LsSvLQQDnOUOBdvk2JvYjVd5iw6DfdADmFj1D/9K59WfaLFVi8o793o+wrw6lm+XUx dgG1q0iC05tUMacCQ1PadAqpV4hwppxpR9/uGcSGz6oA9CtcDJRMQbz3dD5BpqYS//SX ur16LbuFXzXFTPnO8FmrK0WfGo6BX+OzEEKS7B5wqvbE+oM2PFyvoQn/BI4UK8HSh65T Q9K9FSU+Seqht5rNPVlxJouBPUPqpYG59vLYWdOJaJUPJJ7A1mUN5BuKE+uDOBtMG+8e +F9RwAsewFnudm2ofS+u6ujfwllKsztt0aER/Ijhu7ePmx7ne2T69qoMitq37k+HtE/8 Unvw==; darn=lists.php.net ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777628274; x=1778233074; darn=lists.php.net; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=wRudOk/KGJZjBPyM6prY6z4FSvaoHhWLAPPlHb39/ps=; b=aRYbLkWqS9vx4AOq/NXA5RVxEr6Dp2JKLjExTPCUb5PEhP/bc3xBla4nDyxge9/E80 sxKyD/Fo81BTI86V0+MJOdk3He9i5KNfvGR6vDVtN1Z/Fp6UrT/gOu2TWuIPzGMUWtWm /DdTPI1iUie/PvXZw+1xpieNgg6PLMdlCfMMuIOkla+5L+248u97288ipZmat3YDNjb/ iJ+IW1CbtAQ1RswymwqYEJN0hu4Rnq2ls87kLTGRNbnxEwpnret8TXq5v9L1qfcScKXo kzb8CgeNmBLL3TF759/yjLyww//pz1dQJ20SnehOUTbT63fQeuhaOvII5zw2dSL/eiTt RAlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777628274; x=1778233074; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wRudOk/KGJZjBPyM6prY6z4FSvaoHhWLAPPlHb39/ps=; b=ECO8N35p+qDTKapUGmE2NJGLUCCMYWTtfN3mEvFfJQ6m3MTUrf3aTydq3bnq2/Bjvj CJDzd9lL/BtmKcVGmTFB8+byPBw1JXR+QBzLBRYrsCRrsu6tvQGHy7i6Ox7GKopvjqwj hqoqAGPprQUfoyJ75qVlUgmKLJhNkos1f7pZD7p9BBSFhiSBgXS7PxqiBpTdNEdxdxRc xSKsUF0PvTT2OqhU7i+WCd8DEULktlBezbijqE+pW3qt4PZkHMLwjz3Ve8THrdgn8M/L w+5AEPfEyJw8iP26k2KkJ5vSYJzMpSD6lbWGkwbcyb0RFhol941CcF32vR4UQI9Ps0+j jDbw== X-Gm-Message-State: AOJu0YzXv1bag2ztI0fmH12ReMZPAq7baf0+eCf5XLWWQ0ko8AzHaGsB NveU8FpthGgFLwurDbbKlonnbFZAQNBIf9C65lZuMCb1sFLDTNKewLqpVLWpAjywN0956RazFZT n/oFz8fbe/7m9tqUx3hmMIvizkpg3u1KgCiMVyGc= X-Gm-Gg: AeBDieuvhhEDU0omtHNHInfj9BWBQFuY2f3JxWrh3L526J9Rzez9RZg0kypF2g6rJkc cmwL/YlyxfyASVi4iRjrwbbG37sQkgDBNoSKkCd8bCkKW4DD6Cb4oeVS2pfAuG7nlEObNiooHMW O0PeijX0pi2dmFI622VOT9vpJob3SJkoFvctR8NStfHBW3bUo7rzXVjJZXG+sNZ1lh/n17fOI05 IOrvOO5hxfJH9dLXVzbijI73/4pNe+bxTNnUSJgtKPR6Klqvgn79/cKh/B7u44i5r+YLUutqEvo 3ROXdabSw95wfusFQoIccPcWwxCeqmnH/aIdOrysPUdh+2LdFC+awdFrSTWRmlOGl/jL3EATwaG MLDyd3DVsv9ccbeqJz7G6HXMV8g0LUdwL2XdYvrOxtINZta5Hs/FQBg4bFFngub1TwgDVttdeqz 1b9PgOTGyNUtQA4KyikAO9P6qOrBxvR+VJjKbP/etgLo4Gi7A= X-Received: by 2002:a05:620a:258b:b0:8dd:7422:6934 with SMTP id af79cd13be357-8fa8961563emr929409785a.44.1777628274224; Fri, 01 May 2026 02:37:54 -0700 (PDT) Precedence: list list-help: list-unsubscribe: list-post: List-Id: x-ms-reactions: disallow MIME-Version: 1.0 Date: Fri, 1 May 2026 11:37:43 +0200 X-Gm-Features: AVHnY4KeptxwcNsHp-7uEs3jdioqCYc7rX4sIyFTfDb4QwzKAJga1cPHG0L86uw Message-ID: Subject: [PHP-DEV] [RFC] __exists(), a magic method for distinguishing "missing" from "set to null" To: PHP Internals List Content-Type: multipart/alternative; boundary="000000000000d3f3410650be55df" From: nicolas.grekas+php@gmail.com (Nicolas Grekas) --000000000000d3f3410650be55df Content-Type: text/plain; charset="UTF-8" Dear internals, It's my pleasure to submit this new RFC to yours. Please have a look and let me know: https://wiki.php.net/rfc/exists-magic-method TL;DR: I'm proposing a new opt-in magic method: public function __exists(string $name): bool; It'd let userland tell "set to null" apart from "missing" on objects, it'd restore isset() <=> ?? equivalence on magic properties, and it'd fixe GH-12695 as a corollary. It's forward-compatible as a regular method on PHP <= 8.5 (probeable via method_exists()), and would be magic on 8.6+. Cheers, Nicolas --000000000000d3f3410650be55df Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Dear internals,

It's my pleasure=C2= =A0to submit this new RFC to yours.
Please have a look and let=C2= =A0me know:

TL;DR: I'm proposing a new opt-in magic method:

=C2=A0= =C2=A0 public function __exists(string $name): bool;

It'd let u= serland tell "set to null" apart from "missing" on obje= cts, it'd restore
isset() <=3D> ?? equivalence on magic proper= ties, and it'd fixe GH-12695 as a
corollary. It's forward-compat= ible=C2=A0as a regular method on PHP <=3D 8.5 (probeable
via method_e= xists()), and would be magic on 8.6+.

Cheers,
Nicolas
--000000000000d3f3410650be55df--