Übergeordnetes PHPDOCS -Argument einer Methode in einer übergeordneten KlassePhp

PHP-Programmierer chatten hier
Anonymous
 Übergeordnetes PHPDOCS -Argument einer Methode in einer übergeordneten Klasse

Post by Anonymous »

Meine Frage, um die Code -Fertigstellung in einer Reihe von Klassen zu bearbeiten, die ich habe. < /p>

Code: Select all

+ abstract Model :: make(array{...})
+- SubModel
+- AnotherSubModel
+- ...
< /code>
Ich habe eine abstrakte Modellklasse und mehrere untergeordnete Klassen, die sie erweitern. Die Modellklasse verfügt über eine Make -Funktion, die eine Reihe von Eigenschaften akzeptiert und eine neue statische Instanz der Kinderklasse zurückgibt, die sie aufgerufen wird. Es verwendet Reflexion, um jede Eigenschaft aus dem Array der richtigen Eigenschaft in der untergeordneten Klasse zuzuweisen. < /P>
Beispielcode: < /p>
abstract class Model {

public static function make(array $props): static
{
// ... magic
}

}

class SubModel extends Model {

protected ?string $subModelProp = null;

}

$instance = SubModel::make(['subModelProp' => 'Hello, World']);

// I'd like code completion in the IDE to tell me notAProp isn't valid:
$instanceTwo = SubModel::make(['notAProp' => 'Whoops']);
< /code>
Ich versuche herauszufinden, wie ich die Fertigstellung in PHPSTORM erstellt, damit nur gültige Array -Tasten übergeben werden. Jedes Submodell verfügt über eine bestimmte Liste von Eigenschaften, die festgelegt werden können. Idealerweise würde ich in der Lage sein, die Form des Eigenschaftenarrays in der Kinderklasse zu erklären und die IDE aufmerksam zu machen, wenn sich eine ungültige Eigenschaft im Array befindet, eine Eigenschaft fehlt und nur allgemeine Unterstützung, um zu wissen, welche Eigenschaften sind erlaubt. < /p>
Die Phpstan -Dokumente für Array -Formen, z. Array {'foo': int, "baly": string} 
scheint eine ideale Möglichkeit, die Form zu beschreiben, die mein Eingangsarray für die zugehörige Modellklasse übereinstimmt. Ich kann jedoch nicht herausfinden, wie/wo die Array-Form in meiner Unterklasse deklariert werden soll, ohne die Methode in jeder Subklasse erneut zu implementieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post