To type or not to type

PHP 7.4 erhält Typed Properties: Auf dem Weg zum typsicheren PHP?
Keine Kommentare

Das Team der PHP Internals hat abgestimmt: PHP 7.4 wird Typed Properties erhalten. Was bedeutet das genau?

Typed Properties in PHP 7.4

In einer internen Abstimmung der PHP-Kernentwicklergruppe wurde der PHP RFC: Typed Properties 2.0 mit großer Mehrheit angenommen. 70 Mitglieder der PHP Internals haben dafür gestimmt, das Feature in die Version 7.4 von PHP mit aufzunehmen. Nur eine Gegenstimme erhielt der Vorschlag.

Bei den Typed Properties geht es um die Möglichkeit, Typen für Klassen-Properties zu deklarieren. Das Beispiel aus dem RFC sieht wiefolgt aus:

class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;
 
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
 
    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }
 
    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
}

Das obere Code-Beispiel könnte mit typisierten Properties so geschrieben werden:


class User {
    public int $id;
    public string $name;
 
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

Außerdem können zur Laufzeit Type Annotations für deklarierte Properties erzwungen werden, wobei die folgenden Typen unterstützt werden sollen:

class Example {
    // All types with the exception of "void" and "callable" are supported
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;
 
    // Types are also legal on static properties
    public static iterable $staticProp;
 
    // Types can also be used with the "var" notation
    var bool $flag;
 
    // Typed properties may have default values (more below)
    public string $str = "foo";
    public ?string $nullableStr = null;
 
    // The type applies to all properties in one declaration
    public float $x, $y;
    // equivalent to:
    public float $x;
    public float $y;
}

Das Feature der Typed Properties ist bereits seit längerer Zeit in der Diskussion und stand 2016 schon einmal zur Abstimmung. Damals war der RFC allerdings abgelehnt worden.

Mit dem neuen RFC: Typed Properties 2.0 hatten Bob Weinand und Nikita Popov am 15. Juni 2018 einen neuen Anlauf unternommen. Der neue RFC unterscheidet sich allerdings in zwei Punkten vom alten Vorschlag: Es sollen zum einen auch Typen für statische Properties unterstützt werden, was früher nicht der Fall war und zu Sprachinkonsistenten geführt hatte. Zum anderen sollen auch Referenzen zu typisierten Properties möglich sein.

PHP auf dem Weg zur Typsicherheit?

Für PHP als traditionell dynamisch typisierte Sprache steht mit den Typed Properties ein weiteres Feature an, das eine größere Typsicherheit garantieren soll. Nicht alle sehen dies jedoch als positive Entwicklung. Freunde der dynamischen Typisierung betrachten den Zwang zur Typendeklaration oft als Balast. So warnt etwa Paul Redmond auf dem Laravel-Blog davor, die dynamischen Wurzeln von PHP nicht aufzugeben, da sich Teile der Community sonst anderen Sprachen zuwenden könnten:

What does that mean for those wanting to program without types? Only time will tell, but I predict that at least a small majority of programmers wishing the language to stay with its dynamic roots will look to other languages.

Allerdings stellt sich die Frage der Typisierung nicht nur der PHP Community. Beispielsweise wurde der Ruf nach einer optionalen Typisierung auch in der JavaScript-Szene laut. Als Ergebnis wurde von Microsoft bekanntlich TypeScript als typisierte JavaScript-Variante entworfen – eine Entwicklung, die den Erfolg von JavaScript sicherlich noch befeuerte anstatt ihm schaden.

Über die genaue Implementierung der Typed Properties in PHP ist noch nicht das letzte Wort gesprochen. Die aktuelle Diskussion lässt sich hier nachvollziehen. Geplant sind die Typed Properties für PHP 7.4, das frühestens Ende 2019 zu erwarten ist.

International PHP Conference 2018

Getting Started with PHPUnit

by Sebastian Bergmann (thePHP.cc)

Squash bugs with static analysis

by Dave Liddament (Lamp Bristol)

API Summit 2018

From Bad to Good – OpenID Connect/OAuth

mit Daniel Wagner (VERBUND) und Anton Kalcik (business.software.engineering)

Unsere Redaktion empfiehlt:

Relevante Beiträge

X
- Gib Deinen Standort ein -
- or -