Each PHP minor version gets a batch of deprecations, warnings that something will stop working in a later release. This RFC, started by Daniel Scherzer, collects the deprecations for PHP 8.7. Unless an item says otherwise, each one would be removed in PHP 9.

So far the list has three items. Two deal with passing the wrong kind of value to a class check, and one retires an old string prefix.

is_a() with a value that isn't a string or object

is_a() checks whether an object or class name is a given class or interface. The first argument should be an object or a class name, but PHP accepts anything, and for other values it always returns false:

is_a(5, "int");     // always false
is_a(true, "bool"); // always false

The RFC would deprecate passing anything that isn't a string or an object, with a notice like this:

Deprecated: Calling is_a() with $object_or_class of type %s is deprecated.

If you don't know a value's type ahead of time, the RFC suggests calling is_object() first.

is_subclass_of() with a value that isn't a string or object

is_subclass_of() works like is_a(), except it returns false when the class is the exact same one. It has the same problem: pass 5 or true, and you always get false.

The RFC would deprecate this case too, with a matching notice. It also points out that subclasses only exist for objects, so the check makes no sense for other values.

The b prefix for binary strings

PHP still accepts a b in front of a string literal, as in b"hello". It does nothing today. The prefix and the (binary) cast both arrived in PHP 5.2.1, to prepare code for a PHP 6 that never shipped. A 2016 RFC to deprecate both was declined, but the (binary) cast was deprecated in PHP 8.5.

Juliette Reinders Folmer raised the prefix on internals, and Scherzer added it to this RFC on October 5, 2026. The entry has no write-up on the wiki yet.

What it means for existing code

If you pass numbers, booleans, arrays or null to is_a() or is_subclass_of(), you'd start seeing deprecation notices in PHP 8.7. The result wouldn't change yet, because those calls already return false, and checking with is_object() first clears the notice.

If your code writes b"..." or b'...', you'd get a deprecation notice too. Dropping the b keeps the string exactly the same.

Each item gets its own vote, and each needs a two-thirds majority to pass.

Where it stands

The RFC is a draft, created on August 12, 2026, and discussion on the mailing list hasn't started yet. Scherzer said on internals that it should be formally under discussion next year. The list may still grow, since the page keeps a blank example entry for new items.