Closed
Description
Description
The following code:
<?php
namespace enum_demo {
enum _ {}
}
namespace interface_demo {
interface _ {}
}
namespace trait_demo {
trait _ {}
}
namespace class_demo {
class _ {}
}
Resulted in this output:
Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/2mWrG on line 4
Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/2mWrG on line 7
Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/2mWrG on line 10
Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/2mWrG on line 13
But I expected this output instead:
Deprecated: Using "_" as an enum name is deprecated since 8.4 in /in/2mWrG on line 4
Deprecated: Using "_" as an interface name is deprecated since 8.4 in /in/2mWrG on line 7
Deprecated: Using "_" as a trait name is deprecated since 8.4 in /in/2mWrG on line 10
Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/2mWrG on line 13
This example is for the _
deprecation (#15360) but this is a general issue in zend_assert_valid_class_name()
- try enum bool {}
and you get a fatal error about the class name. Also applies to class_alias
errors:
<?php
class_alias( 'stdClass', '_' );
class_alias( 'stdClass', 'bool' );
produces
Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/cdB1P on line 3
Fatal error: Cannot use 'bool' as class name as it is reserved in /in/cdB1P on line 4
PHP Version
PHP 8.2+