Wozu dienen die Fragezeichen vor der Typdeklaration in PHP7 (?string oder ?int)?

Lesezeit: 3 Minuten

Wozu dienen die Fragezeichen vor der Typdeklaration in PHP7 string
divHelper11

Können Sie mir bitte sagen, wie das heißt? ?string und string

Anwendungsbeispiel:

public function (?string $parameter1, string $parameter2) {}

Ich wollte etwas darüber lernen, aber ich kann sie weder in der PHP-Dokumentation noch in Google finden. Was ist der Unterschied zwischen ihnen?

1646642046 225 Wozu dienen die Fragezeichen vor der Typdeklaration in PHP7 string
Syscall

Was ist ein Nullable-Typ?

Eingeführt in PHP 7.1,

Typdeklarationen für Parameter und Rückgabewerte können jetzt als nullable gekennzeichnet werden, indem dem Typnamen ein Fragezeichen vorangestellt wird. Dies bedeutet, dass neben dem angegebenen Typ auch NULL als Argument übergeben bzw. als Wert zurückgegeben werden kann.

Bei Parametern

function test(?string $parameter1, string $parameter2) {
    var_dump($parameter1, $parameter2);
}

test("foo", "bar");
test(null, "foo");
test("foo", null); // Uncaught TypeError: Argument 2 passed to test() must be of the type string, null given,

Mit vielfältigen Argumenten

In diesem Beispiel können Sie bestehen null oder string Parameter:

function acceptOnlyStrings(string ...$parameters) { }
function acceptStringsAndNull(?string ...$parameters) { }

acceptOnlyStrings('foo', null, 'baz'); // Uncaught TypeError: Argument #2 must be of type string, null given
acceptStringsAndNull('foo', null, 'baz'); // OK

Rückgabetyp

Der Rückgabetyp einer Funktion kann auch ein Nullable-Typ sein und ermöglicht die Rückgabe null oder der angegebene Typ.

function error_func(): int {
    return null ; // Uncaught TypeError: Return value must be of the type integer
}

function valid_func(): ?int {
    return null ; // OK
}

function valid_int_func(): ?int {
    return 2 ; // OK
}

Eigenschaftstyp (ab PHP 7.4)

Der Typ einer Eigenschaft kann ein Nullable-Typ sein.

class Foo
{
    private object $foo = null; // ERROR : cannot be null
    private ?object $bar = null; // OK : can be null (nullable type)
    private object $baz; // OK : uninitialized value
}

Siehe auch :

Nullfähige Union-Typen (ab PHP 8.0)

Ab PHP 8, ?T Notation wird als Abkürzung für den üblichen Fall von angesehen T|null

class Foo
{
    private ?object $bar = null; // as of PHP 7.1+
    private object|null $baz = null; // as of PHP 8.0
}

Fehler

Falls die laufende PHP-Version niedriger als PHP 7.1 ist, wird ein Syntaxfehler ausgegeben:

Syntaxfehler, unerwartetes ‘?’, erwartete Variable (T_VARIABLE)

Die ? Betreiber sollte entfernt werden.

PHP7.1+

function foo(?int $value) { }

PHP 7.0 oder niedriger

/** 
 * @var int|null 
 */
function foo($value) { }

Verweise

Ab PHP7.1: Nullfähiger Typ :

Ab PHP7.4: Typdeklarationen von Klasseneigenschaften.

Ab PHP 8.0: Nullable Union Type

Wozu dienen die Fragezeichen vor der Typdeklaration in PHP7 string
Obsidian-Zeitalter

Das Fragezeichen vor dem string in Ihrem Funktionsparameter bezeichnet a Nullable-Typ. In deinem obigen Beispiel $parameter1 Muss darf eine haben NULL Wert, während $parameter2 ist nicht; es muss eine gültige Zeichenfolge enthalten.

Parameter mit einem Nullable-Typ haben keinen Standardwert. Wenn er weggelassen wird, ist der Wert standardmäßig nicht null und führt zu einem Fehler:

Funktion f(?aufrufbar $p) { }
F(); // ungültig; Funktion f hat keinen Standardwert

Wozu dienen die Fragezeichen vor der Typdeklaration in PHP7 string
sorak

Das bedeutet, dass das Argument als der angegebene Typ oder NULL übergeben werden darf:

http://php.net/manual/en/migration71.new-features.php

Dies entspricht in etwa

 public function (string $parameter1 = null, string $parameter2) {}

Außer dass das Argument immer noch erforderlich ist und ein Fehler ausgegeben wird, wenn das Argument weggelassen wird.

Speziell in diesem Zusammenhang ist das zweite Argument erforderlich und wird verwendet =null würde das erste optional machen, was nicht wirklich funktioniert. Sicher, es funktioniert, aber was ich meine, ist, dass es nicht wirklich optional ist, was der Hauptzweck von Standardwerten ist.

Also verwenden

public function (?string $parameter1, string $parameter2) {}

Syntaktisch macht es in diesem Fall etwas mehr Sinn.

964420cookie-checkWozu dienen die Fragezeichen vor der Typdeklaration in PHP7 (?string oder ?int)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy