php / php/php-src

Improve incompatible trait property error message

Offen
#16,643 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

Description

The following code results in a PHP Fatal Error:

trait FooTrait
{
    private array $options = [];
}
class Foo
{
    use FooTrait;
    public function __construct(private array $options = []) {}
}

The error thrown is

PHP Fatal error:  Foo and FooTrait define the same property ($options) in the composition of Foo. However, the definition differs and is considered incompatible.

However, the same thing defined in the class instead of in the constructor works:

trait FooTrait
{
    private array $options = [];
}
class Foo
{
    use FooTrait;
    private array $options = [];
}

As does the same thing, but without setting a default value:

trait FooTrait
{
    private array $options;
}
class Foo
{
    use FooTrait;
    public function __construct(private array $options) {}
}

This seems to be ane rror

PHP Version

PHP 8.1.29 to PHP 8.4.0-dev

Operating System

MAC OSX 14.7

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

In der Issue ist keine Quelldatei und kein Test angegeben. Reproduziere die Beispiele mit den aufgeführten PHP-Versionen und verfolge anschließend die Zusammensetzung von Trait-Eigenschaften mit konstruktorpromovierten Eigenschaften; die Aufgabe ist abgeschlossen, wenn das Verhalten bei inkompatiblen Eigenschaften korrigiert und durch einen Regressionstest abgedeckt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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