Skip to content

Errors about interface/trait/enum names say "class name" #15976

Closed
@DanielEScherzer

Description

@DanielEScherzer

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+

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions