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.