php / php/php-src

Abstract properties (hooks) in traits

Offen
#19,504 10 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Category: Engine Feature Status: Verified
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

https://3v4l.org/UYnbo

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

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

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

Neue Issues direkt in Ihr Postfach

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