Skip to content

Importing a trait and changing visibility is ignored #4516

@ruudk

Description

@ruudk

Bug report

<?php declare(strict_types = 1);

interface RecordsMessages
{
    public function record(object $message): void;
}

trait PrivateMessageRecorderCapabilities
{
    protected function record(object $message): void
    {
    }
}

class PublicMessageRecorder implements RecordsMessages
{
    use PrivateMessageRecorderCapabilities { record as public; }
}

$recorder = new PublicMessageRecorder();
$recorder->record(new DateTime());

PHPStan reports an issue:

Protected method PublicMessageRecorder::record() overriding public method RecordsMessages::record() should also be public.

While this is allowed by PHP, see: https://3v4l.org/J3ged

Code snippet that reproduces the problem

https://phpstan.org/r/03b14d64-3e97-49bd-a994-3c22570ebde3

Expected output

No errors because this is allowed by PHP, see: https://3v4l.org/J3ged

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions