Skip to content

self is incorrectly resolved when used as a return type in a trait method #18295

Closed
@xabbuh

Description

@xabbuh

Description

The following code:

<?php

class CoreTransliterator
{
    public static function create(string $id, int $direction = self::FORWARD): ?CoreTransliterator
    {
    }
}

trait EmojiTransliteratorTrait
{
    public static function create(string $id, int $direction = self::FORWARD): self
    {
    }
}

class EmojiTransliterator extends CoreTransliterator
{
    use EmojiTransliteratorTrait;
}

Resulted in this output:

Fatal error: Declaration of EmojiTransliteratorTrait::create(string $id, int $direction = self::FORWARD): EmojiTransliteratorTrait must be compatible with CoreTransliterator::create(string $id, int $direction = self::FORWARD): ?CoreTransliterator

But I expected this output instead:

The code should continue to work. self in a trait should probably not be resolved at compile time.

PHP Version

8.5

Operating System

No response

Additional information

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions