Abstract properties (hooks) in traits
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.1k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
Description
At the moment such code does not work (8.4 and 8.5/master), which does not seem very logical:
<?php
trait Example
{
abstract public string $property {
get;
}
}
class ExampleImpl
{
use Example;
public function __construct(
public readonly string $property,
) {}
}
Produces:
Fatal error: ExampleImpl and Example define the same hooked property ($property) in the composition of ExampleImpl. Conflict resolution between hooked properties is currently not supported. Class was composed
According to RFC (https://wiki.php.net/rfc/property-hooks#interaction_with_traits), traits do not actually support properties, but at least such primitive conflict resolution would be nice to have.
P.S. Is it worth writing to internals for RFC if there is no way to send a PR?
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem bereitgestellten trait- und hooked-property-Reproducer und lies anschließend den Abschnitt des property-hooks RFC zur trait-Interaktion. Verfolge, wie die Trait-Komposition die abstrakte hooked property und die implementierende constructor-promoted property behandelt. Die Aufgabe ist erledigt, wenn das Beispiel ohne den gemeldeten Konflikt komponiert werden kann und dabei das beabsichtigte property-hook-Verhalten erhalten bleibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- php
- Bereich
- compilers
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 30/100