PHP 7-8 hasznos új funkciók
Hasznos új funkciókat nézzük át, a php verziók fejlődésével, 7.0-tól 8.0-ig. A leírás nem teljes, a linkeken alul található az összes új feature. |
|
PHP 7.0 isset helyett (Null coalescing operator): $data = isset($a) ? $a : 'default_value'; $data = $a ?? 'default_value'; Háromirányú összehasonlító operátor, ha a két érték egyforma akkor 0-t ad vissza, ha a bal oldali a nagyobb akkor 1-et, ha a jobb oldali a nagyobb akkor -1-et ad vissza. (Spaceship operator) echo 23 <=> 23; // 0 echo 5 <=> 7; // -1 echo 8 <=> 4; // 1 Függvények paramétereinek megadhatjuk a típusát és a visszatérési érték típusát: function testFunction(int $a, int $b) : int { return $a + $b; } PHP 7.1 Ha kérdőjelet adunk meg a típus neve mellett, akkor elfogad string-et és null-t paraméterként, és a visszatérési értéke is lehet a függvénynek null vagy string: function testFunction(?string $param): ?string { return $param; } echo testFunction(null); PHP 7.2 Osztályt is adhatunk paraméterként a függvényeknek: class TestClass { public $var = 'Teszt Data'; } $testClass = new TestClass; function testFunction(object $arg) { return $arg->var; } echo testFunction($testClass); A felüldefiniált metódus paraméterének a típusa elhagyható: interface A { public function Test(array $input); } class B implements A { public function Test($input){} } Új típus object: function test(object $obj) : object { return new SplQueue(); } test(new StdClass()); PHP 7.3 Megszámlálhatóság vizsgálat: $data = [1,2,3]; echo $count = is_countable($data) ? count($data) : 'uncountable'; Tömb első és utolsó indexét visszaadó függvények: $array = [ 'a' => 'aaa', 'b' => 'bbb', 'c' => 'ccc', ]; array_key_first($array); // 'a' array_key_last($array); // 'c' PHP 7.4 Ha nem létezik a key mező, akkor beleteszi és falback lesz a mező értéke. $input['key'] ??= 'fallback'; // 'fallback' Tömbök összefűzése: $a = [1, 2, 3]; $b = [4, 5]; $result = [0, ...$a, ...$b, 6 ,7]; Nyíl függvény, használatára egy példa: $posts = [ ["id" => 1, "data" => "data1"], ["id" => 2, "data" => "data2"] ]; $ids = array_map(fn($post) => $post['id'], $posts); Típusdeklaráció: class User { public int $id; public string $name; } PHP 8.0 Union típus, megadható több típus is class teszt { public int|float|null $teszt = null; function testFunction1(int|float $input) : int|float { } function testFunction2(int|null $foo): int { } function testFunction3(?int $bar): int { } } A nullsafe operátor használata: # php < 8 $data = $users->getData(); $result = $data ? $data->userData() : null; # php > 8 $result = $users->getData()?->userData(); Felcserélhetőek a metódusok paraméterei vagy kihagyhatóak is. A híváskor megkell adni a nevüket: function testFunction(int $a, float $b, ?string $c = null, ?string $d = null) { } testFunction(b: 2.4, a: 1, d: 'value d'); Rövidebb alternatíva a switch helyett a match: $result = match($input) { 0 => "hello", '1', '2', '3' => "world", 4 => [6,7,8], default => 'unknown status code', }; A konstruktorban is definiálhatjuk az adattagokat: # php < 8 class Product { public int $amount; public function __construct(int $amount) { $this->amount = $amount; } } # php > 8 class Product2 { public function __construct(public int $amount) { } } Mixed típusú visszatérési értéke lehet a függvényeknek/metódusoknak: function test(): ?mixed {} Olvasnivaló: https://www.php.net/manual/en/migration70.new-features.php https://www.php.net/manual/en/migration71.new-features.php https://www.php.net/manual/en/migration72.new-features.php https://www.php.net/manual/en/migration73.new-features.php https://www.php.net/manual/en/migration74.new-features.php https://stitcher.io/blog/new-in-php-73 https://stitcher.io/blog/new-in-php-74 https://stitcher.io/blog/new-in-php-8 https://sandbox.onlinephpfunctions.com/ |
2021.01.23. |
Figyelem! Az itt olvasható leírások, nem teljesek és nem biztos, hogy pontosak. Nem
frissülnek folyamatosan, ezért nem mindegyik használható az aktuális verziójú rendszerekben. Mindenki saját
felelősségére használja az itt található ötleteket. Az esetleges károkért nem vállalunk felelősséget.