Aus dem Baumhaus-Blog :
Mit PHP 7 haben wir jetzt Skalartypen hinzugefügt. Insbesondere: int, float, string und bool.
Durch Hinzufügen von Hinweisen zum Skalartyp und Aktivieren strenger Anforderungen wird gehofft, dass korrektere und selbstdokumentierendere PHP-Programme geschrieben werden können. Es gibt Ihnen auch mehr Kontrolle über Ihren Code und kann das Lesen des Codes erleichtern.
Standardmäßig sind skalare Typdeklarationen nicht streng, dh sie versuchen, den ursprünglichen Typ so zu ändern, dass er dem in der Typdeklaration angegebenen Typ entspricht. Mit anderen Worten, wenn Sie eine Zeichenfolge, die mit einer Zahl beginnt, an eine Funktion übergeben, für die ein Gleitkomma erforderlich ist, wird die Zahl von Anfang an erfasst und alles andere entfernt. Das Übergeben eines Floats an eine Funktion, die ein int erfordert, wird zu int (1).
Standardmäßig wandelt PHP Werte des falschen Typs nach Möglichkeit in den erwarteten Skalartyp um. Beispielsweise erhält eine Funktion, die eine Ganzzahl für einen Parameter erhält, der eine Zeichenfolge erwartet, eine Variable vom Typ Zeichenfolge.
Strenge Typen deaktiviert ( Bewertung ):
<?php
function AddIntAndFloat(int $a, float $b) : int
{
return $a + $b;
}
echo AddIntAndFloat(1.4, '2');
/*
* without strict typing, PHP will change float(1.4) to int(1)
* and string('2') to float(2.0) and returns int(3)
*/
Es ist möglich, den strengen Modus pro Datei zu aktivieren. Im strengen Modus wird nur eine Variable vom genauen Typ der Typdeklaration akzeptiert oder ein TypeError ausgelöst. Die einzige Ausnahme von dieser Regel besteht darin, dass einer Funktion, die einen Float erwartet, eine Ganzzahl zugewiesen werden kann. Funktionsaufrufe innerhalb interner Funktionen sind von der Deklaration strict_types nicht betroffen.
Um den strengen Modus zu aktivieren, wird die Anweisung declare mit der Deklaration strict_types verwendet:
Strenge Typen aktiviert ( Bewertung ):
<?php declare(strict_types=1);
function AddIntAndFloat(int $a, float $b): int
{
return (string) $a + $b;
}
echo AddIntAndFloat(1.4,'2');
// Fatal error: Uncaught TypeError: Argument 1 passed to AddIntAndFloat() must be of the type int, float given
echo AddIntAndFloat(1,'2');
// Fatal error: Uncaught TypeError: Argument 2 passed to AddIntAndFloat() must be of the type float, string given
// Integers can be passed as float-points :
echo AddIntAndFloat(1,1);
// Fatal error: Uncaught TypeError: Return value of AddIntAndFloat() must be of the type integer, string returned
Arbeitsbeispiel:
<?php
declare(strict_types=1);
function AddFloats(float $a, float $b) : float
{
return $a+$b;
}
$float = AddFloats(1.5,2.0); // Returns 3.5
function AddFloatsReturnInt(float $a, float $b) : int
{
return (int) $a+$b;
}
$int = AddFloatsReturnInt($float,1.5); // Returns 5
function Say(string $message): void // As in PHP 7.2
{
echo $message;
}
Say('Hello, World!'); // Prints "Hello, World!"
function ArrayToStdClass(array $array): stdClass
{
return (object) $array;
}
$object = ArrayToStdClass(['name' => 'azjezz','age' => 100]); // returns an stdClass
function StdClassToArray(stdClass $object): array
{
return (array) $object;
}
$array = StdClassToArray($object); // Returns array
function ArrayToObject(array $array): object // As of PHP 7.2
{
return new ArrayObject($array);
}
function ObjectToArray(ArrayObject $object): array
{
return $object->getArrayCopy();
}
var_dump( ObjectToArray( ArrayToObject( [1 => 'a' ] ) ) ); // array(1 => 'a');