This article mainly introduces the new addition of PHP 7 features, has a certain reference value, now share to everyone, the need for friends can refer to a
Scalar type declaration
PHP 7 The parameter type declaration for a function in can be a scalar. In PHP 5 , only the class name, interface,array , or callable (PHP5.4, which can be functions, including anonymous functions ), you can now also use string,int,float , and bool out.
<?php//Force mode function sumofints (int ... $ints) { return array_sum ($ints);} var_dump (Sumofints (2, ' 3 ', 4.1));
The above example will output:
int (9)
It is important to note that the problem of the strict pattern mentioned above is also applicable here: Coercion mode (default, coercion of type conversions), coercion of type conversions for parameters that do not conform to expectations, triggering in strict mode TypeError fatal error.
return value type declaration
PHP 7 added support for return type declarations. Similar to a parameter type declaration, the return type declaration indicates the type of the function return value. The available types are the same as the types 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 example will output:
Array ( [0]=>6 [1]=>15 [ 2]=>24]
NULL Merge Operators
because there is a large number of simultaneous use of ternary expressions and isset () the situation, NULL The merge operator causes the variable to exist and the value is not NULL , it returns its own value, otherwise it returns its second operand.
Examples are as follows:
<?php//if $_get[' user ' does not exist return ' nobody ', return the value of $_get[' user '] $username = $_get[' user ']?? ' Nobody ';//similar ternary operator $username = isset ($_get[' user ')? $_get[' user ']: ' nobody ';? >
Spaceship operator (combination comparator)
The spaceship operator is used to compare two expressions. When $a is greater than, equal to, or less than $b, it returns -1,0 , or 1, respectively .
Examples are as follows:
<?php//integer echo 1<=>1;//0echo 1<=>2;// -1echo 2<=>1;//1//floating-point echo 1.5<=>1.5;//0echo 1.5<= >2.5;// -1echo 2.5<=>1.5;//1//String echo "a" <=> "a";//0echo "a" <=> "B";// -1echo "B" <=> "a";//1 ?>
through define () defining a constant array
Examples are as follows:
<?phpdefine (' ANIMALS ', [ ' dog ', ' cat ', ' bird '); echo animals[1];//output "Cat"?>
Anonymous class
now supported by New Class to instantiate an anonymous class with the following example:
<?phpinterfacelogger{ publicfunction Log (string $msg);} classapplication{ private $logger; Publicfunction GetLogger (): logger{ return $this->logger; } Publicfunction Setlogger (Logger $logger) { $this->logger = $logger; }} $app =newapplication; $app Setlogger (newclassimplementslogger{ publicfunction log (string $msg) { echo $msg; }}); Var_dump ($app- >getlogger ());? >
The above example will output:
Object (class@anonymous) #2 (0) {}
Unicode codepoint Translation Grammar
this takes a - in the form of Unicodecodepoint , and print out a double quote or Heredoc surrounded by UTF-8 a string encoded in the format. Any valid codepoint can be accepted , and 0 of the beginning can be omitted.
echo "\u{aa}"; echo "\U{0000AA}"; echo "\u{9999}";
The above example will output:
ªª (same as before but with optional leading 0 ' s)
Incense
Closure::call ()
Closure::call () There is now a better performance, a short, skilful way to temporarily bind a method to an object to close the packet and invoke it.
<?phpclass A {private $x =1;}//Pre PHP7 code $GETXCB =function () {return $this->x;}; $getX = $getXCB->bindto (new A, ' a ');//Intermediate Closureecho $getX (); PHP 7+ Code $getx =function () {return $this->x;}; Echo $getX->call (new A);
The above example will output:
11
to be unserialize () Provide filtering
This feature is designed to provide a more secure way of unpacking unreliable data. It prevents potential code injection by using a whitelist approach.
<?php//Convert object to __php_incomplete_class object $data = Unserialize ($foo, ["allowed_classes" =>false]); The conversion object is a __php_incomplete_class object, except for MyClass and Myclass2$data = Unserialize ($foo, ["Allowed_classes" =>["MyClass", " MyClass2 "]); The default accepts all classes $data = Unserialize ($foo, ["allowed_classes" =>true]);
Intlchar
the newly added Intlchar class is designed to expose more ICU function. This class itself defines a number of static methods used to manipulate Unicode characters for multiple character sets .
<?phpprintf ('%x ', Intlchar::codepoint_max); Echo intlchar::charname (' @ '); Var_dump (intlchar::ispunct ('! '));
The above example will output:
10ffffCOMMERCIAL Atbool (True)
to use this class, first install the Intl Extended
Expected
It is expected to use backwards and enhance the previous assert () the method. It enables the assertion to be zero-cost in a production environment, and provides the ability to throw specific exceptions when an assertion fails.
<?phpini_set (' assert.exception ', 1); classcustomerrorextendsassertionerror{} assert (False,newcustomerror (' Someerror message '));? >
The above example will output:
Fatalerror:uncaught customerror:some Error message
Use Strengthen
from the same namespace imported classes, functions, and constants are now available through a single Use Statement imported once.
<?php// PHP 7 Prior version usage use Some\namespace\classa;use some\namespace\classb;use some\namespace\classc as C; Usefunction some\namespace\fn_a;usefunction some\namespace\fn_b;usefunction Some\namespace\fn_c; Useconst some\namespace\consta;useconst Some\namespace\constb;useconst SOME\NAMESPACE\CONSTC; PHP 7+ usage some\namespace\{classa,classb,classcas c};usefunction some\namespace\{fn_a, Fn_b, Fn_c};useconst some\ NAMESPACE\{CONSTA,CONSTB,CONSTC};? >
Generator Strengthen
enhances the Generator features, this can achieve many advanced features
<?php<?php function Gen () { yield1; Yield2; Yieldfrom Gen2 ();} function Gen2 () { yield3; Yield4;} foreach (Gen () as $val) { echo $val, Php_eol;}?>
The above example will output:
1234
Divisible
added an integer division function intp (), usage Examples:
<?phpvar_dump (INTP (10,3));? >
The above example will output:
Int (3)
Related recommendations:
New in PHP 5.4 adds the ability to judge the session state