minte9
LearnRemember



Union Types

A collection of different datatypes in the same memory location.
 
declare(strict_types=1);

/**
 * Union Types
 * 
 * Prior to PHP 8.0 you could only declare a single type for ...
 * properties, parameters, and return types.
 * 
 * To separate each datatype use pipe |
 * 
 * ?string - equivalent with string|null
 */

class A 
{
    private static int|float $i = 10; // Look Here

    public function add(int|float $n, ?string $name)
    {
        self::$i +=  $n;
    }

    public function get(): int|float
    {
        return self::$i;
    }
}

$a = new A();

$a->add(10, "one");
echo $a->get(); // 20

$a->add(2.2, NULL); 
echo $a->get(); // 22.2

Match

Match expression improves the switch syntax in multiple ways.
 
/**
 * Match expression
 * 
 * Match syntax improves the switch syntax in multiple ways:
 *      - returns value
 *      - multiple matching conditions allowed
 *      - implicit break
 *      - strict matching (value and type)
 */

class B 
{
    public String $request_method = 'GET';

    public function __construct(String $request_method) 
    {
        $result = match($request_method) { // Look Here
            
            'POST' => $this->handle_post(),
            'GET', 'HEAD' => $this->handle_get(),
            default => throw new \Exception('Unsupported'),
        };

        echo $result;
    }

    private function handle_post(): String
    {
        return 'This is POST';
    }

    private function handle_get(): String
    {
        return 'This is GET';
    }
}

try {
    new B('POST');  // This is POST
    new B('GET');   // This is GET
    new B('HEAD');  // This is GET
    new B('HTTP');
} catch(Exception $e) {
    echo $e->getMessage(); // Unsupported
}



  Last update: 432 days ago