Home  >  Article  >  Backend Development  >  Introduction to new features such as php7 functions, declarations, return values, etc.

Introduction to new features such as php7 functions, declarations, return values, etc.

不言
不言Original
2018-06-04 17:36:371389browse

This article mainly introduces the new features of php7 functions, declarations, return values, etc. It is very good and has certain reference value. Friends in need can refer to it

Use... Operator definition changes Long parameter functions (PHP 5 >= 5.6.0, PHP 7)

You can now implement variable-length parameter functions without relying on func_get_args(), using the... operator.

<?php
function f($req, $opt = null, ...$params) {
 // $params 是一个包含了剩余参数的数组
 printf(&#39;$req: %d; $opt: %d; number of params: %d&#39;."\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 will output:

$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

Use... operator for parameter expansion (PHP 5 >= 5.6.0 , PHP 7)

When calling a function, use the... operator to expand arrays and traversable objects into function parameters. In other programming languages, such as Ruby, this is called the concatenation operator.

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

The above routine will output:

6

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

use operator has been extended to support importing external functions and constants into classes. 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 will output:

42
Name\Space\f

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

Add debugInfo(), which can be used to control the attributes 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 [
  &#39;propSquared&#39; => $this->prop ** 2,
 ];
 }
}
var_dump(new C(42));
?>

The above routine will output:

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

Scalar type declaration (PHP 7)

There are two modes for scalar type declarations: mandatory (default) and strict mode. The following type parameters are now available (either in forced or strict mode): string, int, float, and bool. They extend other types introduced in PHP5: class names, interfaces, arrays and callback types.

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

The above routine will output:

int(9)

To use strict mode, a declare declaration directive must be placed at the top of the file. This means that scalars are strictly declared configurable on a file basis. This directive not only affects the type declaration of parameters, but also affects the return value declaration of the function (see return value type declaration, built-in PHP functions and PHP functions loaded in extensions)

Return value type declaration ( PHP 7)

PHP 7 adds support for return type declarations. Similar to the parameter type declaration, the return type declaration specifies the type of the function's return value. The available types 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 will output:

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

null merge operation operator (PHP 7)

Since there are a lot of situations where ternary expressions and isset() are used simultaneously in daily use, we have added the syntax sugar of null coalescing operator (??). If the variable exists and is not NULL, it returns its own value, otherwise it returns its second operand.

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

Spaceship operator (combined comparison operator) (PHP 7)

The spaceship operator is used to Compares 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 PHP's regular comparison rules.

<?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
?>

Define constant arrays via define() (PHP 7)

Constants of type Array can now be defined via define () to define. In PHP5.6 it can only be defined via const.

<?php
define(&#39;ANIMALS&#39;, [
 &#39;dog&#39;,
 &#39;cat&#39;,
 &#39;bird&#39;
]);
echo ANIMALS[1]; // outputs "cat"
?>

Related recommendations:

How to enable Opcode in PHP7 to create powerful performance

The above is the detailed content of Introduction to new features such as php7 functions, declarations, return values, etc.. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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