Skip to content

Cannot override DirectoryIterator::current() without return typehint in 8.1 #8192

Closed
@zerocrates

Description

@zerocrates

Description

The following code:

<?php
class OverrideValidDirectoryIterator extends DirectoryIterator {
    public function valid() {
        return null;
    }
}

class OverrideCurrentDirectoryIterator extends DirectoryIterator {
    public function current() {
        return null;
    }
}

Resulted in this output:

Deprecated: Return type of OverrideValidDirectoryIterator::valid() should either be compatible with DirectoryIterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/S7tkM on line 4

Fatal error: Declaration of OverrideCurrentDirectoryIterator::current() must be compatible with DirectoryIterator::current(): mixed in /in/S7tkM on line 10

Obviously the first here is just a form of the documented 8.1 deprecation of overriding core classes without matching return typehints, but unlike for other methods on DirectoryIterator, overriding current() in this way is a fatal error and not an E_DEPRECATED, and the ReturnTypeWillChange attribute has no effect.

PHP Version

PHP 8.1.3

Operating System

No response

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