After #22681 I looked into exception messages:
Reflection*::getAttributes() with ReflectionAttribute::IS_INSTANCEOF
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->getAttributes("foo\0bar", ReflectionAttribute::IS_INSTANCEOF);
ReflectionFunction::__construct()
<?php
new ReflectionFunction("foo\0bar");
ReflectionParameter::__construct() with string function
<?php
new ReflectionParameter("foo\0bar", 0);
ReflectionParameter::__construct() with array with class name
<?php
new ReflectionParameter(["foo\0bar", ""], 0);
ReflectionParameter::__construct() with array with method name
<?php
class Demo {}
new ReflectionParameter([Demo::class, "foo\0bar"], 0);
ReflectionMethod::__construct() with class name
<?php
new ReflectionMethod("foo\0bar", "");
ReflectionMethod::__construct() with method name
<?php
class Demo {}
new ReflectionMethod(Demo::class, "foo\0bar");
the above two should also apply to ReflectionMethod::createFromMethodName() - they share the same lookup code
ReflectionClassConstant::__construct() with class name
<?php
new ReflectionClassConstant("foo\0bar", "");
ReflectionClassConstant::__construct() with constant name
<?php
class Demo {}
new ReflectionClassConstant(Demo::class, "foo\0bar");
ReflectionClass::__construct()
<?php
new ReflectionClass("foo\0bar");
ReflectionClass::getStaticPropertyValue()
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->getStaticPropertyValue("foo\0bar");
ReflectionClass::setStaticPropertyValue()
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->setStaticPropertyValue("foo\0bar", 123);
ReflectionClass::getMethod()
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->getMethod("foo\0bar");
ReflectionClass::getProperty()
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->getProperty("foo\0bar");
ReflectionClass::isSubclassOf()
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->isSubclassOf("foo\0bar");
ReflectionClass::implementsInterface()
<?php
class Demo {}
$r = new ReflectionClass(Demo::class);
$r->implementsInterface("foo\0bar");
ReflectionProperty::__construct() with class name
<?php
new ReflectionProperty("foo\0bar", "");
ReflectionProperty::__construct() with property name
<?php
class Demo {}
new ReflectionProperty(Demo::class, "foo\0bar");
ReflectionProperty::skipLazyInitialization() with property name
<?php
$o = (object)["foo\0bar" => "baz"];
$r = new ReflectionProperty($o, "foo\0bar");
$r->skipLazyInitialization($o);
also affects anything else using reflection_property_check_lazy_compatible()
ReflectionEnum::getCase() with missing case
<?php
enum Demo {}
$r = new ReflectionEnum(Demo::class);
$r->getCase("foo\0bar");
ReflectionConstant::__construct()
<?php
new ReflectionConstant("foo\0bar");
After #22681 I looked into exception messages:
Reflection*::getAttributes() with ReflectionAttribute::IS_INSTANCEOF
ReflectionFunction::__construct()
ReflectionParameter::__construct() with string function
ReflectionParameter::__construct() with array with class name
ReflectionParameter::__construct() with array with method name
ReflectionMethod::__construct() with class name
ReflectionMethod::__construct() with method name
the above two should also apply to ReflectionMethod::createFromMethodName() - they share the same lookup code
ReflectionClassConstant::__construct() with class name
ReflectionClassConstant::__construct() with constant name
ReflectionClass::__construct()
ReflectionClass::getStaticPropertyValue()
ReflectionClass::setStaticPropertyValue()
ReflectionClass::getMethod()
ReflectionClass::getProperty()
ReflectionClass::isSubclassOf()
ReflectionClass::implementsInterface()
ReflectionProperty::__construct() with class name
ReflectionProperty::__construct() with property name
ReflectionProperty::skipLazyInitialization() with property name
also affects anything else using
reflection_property_check_lazy_compatible()ReflectionEnum::getCase() with missing case
ReflectionConstant::__construct()