php / php/php-src

8.3 - cannot set finality and visibility for method from trait at the same time

Offen
#12,855 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Status: Needs Triage
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

<?php

trait SimpleTrait
{
    private function foo() {}
}

class TraitFixtureWithFinalAndProtected
{
    use SimpleTrait {
        foo as final protected;
    }
}

$rm = new ReflectionMethod(TraitFixtureWithFinalAndProtected::class, 'foo');
var_dump($rm->isFinal());
var_dump($rm->isPrivate());
var_dump($rm->isProtected());
var_dump($rm->isPublic());

Resulted in this output:

bool(false)
bool(true)
bool(false)
bool(false)

But I expected this output instead:

bool(true)
bool(false)
bool(true)
bool(false)

Looks like as final protected is completely ignored, does not change the method but does not throw an error either.

Related to: https://github.com/php/php-src/issues/12854

PHP Version

PHP 8.3

Operating System

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie damit, den bereitgestellten PHP-8.3-Reproducer auszuführen und die ReflectionMethod-Flags mit der erwarteten Ausgabe zu vergleichen. Verfolgen Sie den Pfad für das Aliasing von Trait-Methoden, der für as final protected verantwortlich ist, fügen Sie anschließend einen Regressionstest hinzu, der zeigt, dass beide Modifikatoren angewendet werden, und bestätigen Sie die reflektierte Sichtbarkeit und Finalität.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
54/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.