Introduction of new features such as functions declarations and return values in php7

  • 2021-10-11 17:51:43
  • OfStack

Define variable-length argument functions using the... operator (PHP 5 > = 5.6.0, PHP 7)

Instead of relying on func_get_args (), you can now implement variable-length argument functions using the... operator.


<?php
function f($req, $opt = null, ...$params) {
 // $params  Yes 1 Arrays containing the remaining parameters 
 printf('$req: %d; $opt: %d; number of params: %d'."\n",
  $req, $opt, count($params));
}
f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
?>

The above routine outputs:

$req: 1; $opt: 0; number of params: 0
$req: 1; $opt: 2; number of params: 0
$req: 1; $opt: 2; number of params: 1
$req: 1; $opt: 2; number of params: 2
$req: 1; $opt: 2; number of params: 3

Parameter expansion using the... operator (PHP 5 > = 5.6.0, PHP 7)

When calling a function, use the... operator to expand the array and traversible objects into function arguments. In other programming languages, such as Ruby, this is called the join operator.


<?php
function add($a, $b, $c) {
 return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>

The above routine outputs:

6

use function and use const (PHP 5 > = 5.6.0, PHP 7)

The use operator is extended to support importing external functions and constants into a class. The corresponding structures are use function and use const.


<?php
namespace Name\Space {
 const FOO = 42;
 function f() { echo FUNCTION."\n"; }
}
namespace {
 use const Name\Space\FOO;
 use function Name\Space\f;
 echo FOO."\n";
 f();
}
?>

The above routine outputs:

42

Name\Space\f

debugInfo() (PHP 5 > = 5.6.0, PHP 7)

Add debugInfo (), which can be used to control the properties and values to be output when using var_dump () to output objects.


<?php
class C {
 private $prop;
 public function construct($val) {
 $this->prop = $val;
 }
 public function debugInfo() {
 return [
  'propSquared' => $this->prop ** 2,
 ];
 }
}
var_dump(new C(42));
?>

The above routine outputs:


object(C)#1 (1) {
 ["propSquared"]=>
 int(1764)
}

Scalar Type Declaration (PHP 7)

There are two modes of scalar type declaration: mandatory (default) and strict mode. You can now use the following type parameters (in either mandatory or strict mode): string (string), integer (int), floating-point number (float), and Boolean value (bool). They extend other types introduced in PHP 5: class names, interfaces, arrays, and callback types.


<?php
// Coercive mode
function sumOfInts(int ...$ints)
{ return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));

The above routine outputs:

int(9)

To use strict mode, 1 declare declaration directive must be placed at the top of the file. This means that strictly declaring scalars is file-based. This directive affects not only the type declaration of the parameter, but also the return value declaration of the function. (See Return Value Type Declaration, the built-in PHP function, and the PHP function loaded in the extension.)

Return Value Type Declaration (PHP 7)

PHP 7 adds support for return type declarations. Similar to parameter type declaration, return type declaration indicates the type of function return value. The types available are the same as those available in the parameter declaration.


<?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]));

The above routine outputs:


Array
(
[0] => 6
[1] => 15
[2] => 24
)

null Merge Operator (PHP 7)

Because there are a lot of cases where 3 yuan expressions and isset () are used at the same time in daily use, we added the null merge operator (? ? ) This grammar sugar. If the variable exists and the value is not NULL, it returns its own value, otherwise it returns its second operand.


<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
 
// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

Spacecraft Operator (Combination Comparator) (PHP 7)

The spacecraft operator is used to compare two expressions. It returns-1, 0, or 1 when $a is less than, equal to, or greater than $b, respectively. The principle of comparison follows the conventional comparison rules of PHP.


<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>

Defining the Array of Constants via define () (PHP 7)

Constants of type Array can now be defined by define (). It can only be defined by const in PHP 5.6.


<?php
function add($a, $b, $c) {
 return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>
0

Summarize


Related articles: