Detailed explanation of new scalar, operator, and return value type features in php7

伊谢尔伦
Release: 2023-03-11 15:22:01
Original
1397 people have browsed it

1. ?? operator (NULL coalescing operator)

$a = $_GET['a'] ?? 1;
Copy after login

It is equivalent to:

$a = empty($_GET['a']) ? 1 : $_GET['a'];
Copy after login

We knowternary operation The symbol can be used like this:

$a ?: 1
Copy after login

But this is based on the premise that $a has been defined. The new ?? operator can simplify judgment. The code is simplified and more intuitive at the same time!

2. Function return value type declaration

Example provided by the official document (note that the side length parameter syntax of ... is only available in PHP 5.6 or above) :

<?php
function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
Copy after login

It can be seen from this example that all functions (including anonymous functions) can specify the type of return value.

This feature can help us avoid some problems caused by PHP's implicit type conversion. Thinking about the expected results before defining a function can avoid unnecessary errors.

But there is also a feature that needs attention here. PHP 7 adds a declare directive: strict_types, which uses strict mode.

When using return value type declaration, if it is not declared in strict mode, and if the return value is not the expected type, PHP will still perform cast type conversion on it. But if it is strict mode, a Fatal error of TypeError will be issued.

Force mode:

<?php
function foo($a) : int
{
    return $a;
}

foo(1.0);
Copy after login

The above code can be executed normally, and the foo function returns int 1 without any errors.

Strict mode:

<?php
declare(strict_types=1);

function foo($a) : int
{
    return $a;
}

foo(1.0);
Copy after login

After the declaration, a fatal error will be triggered.

# PHP Fatal error:  Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6
Copy after login

3. Scalar type declaration

The formal parameter type declaration of functions in PHP 7 can be scalar. In PHP 5, it can only be a class name, interface, array or callable (PHP 5.4, it can be a function, including anonymous functions). Now you can also use string, int, float and bool are gone.

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, &#39;3&#39;, 4.1));
Copy after login

It should be noted that the strict mode problem mentioned above also applies here: in the forced mode (default, which is forced type conversion), parameters that do not meet the expectations will still be forced to type conversion. Strict In mode, a fatal error of TypeError is triggered.

4. Use batch declaration

In PHP 7, use can declare multiple classes or functions or const in one sentence:

<?php
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
Copy after login

But you still have to write out each The name of a class or function or const (there is no from some import * method like python).

The question you need to pay attention to is: if you are using a framework based on composer and PSR-4, can this writing method successfully load class files? In fact, it is possible. The autoloading method registered by composer is to find the location according to the class's namespace when the class is called. This way of writing has no effect on it.

Let’s talk about a few more briefly:

1. PHP 5.3 started to have anonymous functions, and now there are anonymous classes;

2. define can now define constant arrays ;

3. Closure (Closure) adds a call method;

4. Generator (or iterator is more appropriate) can have a final return value (return), or Enter another generator (generator delegate) through the new syntax of yield from.

The two new features of generators (return and yield from) can be combined. For details, you can test it yourself.

The above is the detailed content of Detailed explanation of new scalar, operator, and return value type features in php7. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template