Wir haben einige häufig verwendete neue Funktionen zusammengestellt, bitte liken Sie! ! !
Neuer Operator
1. ??
$username = $_GET['user'] ?? '';
$username = isset($_GET['user']) ? 'user'] : 'nobody';
2. <=>
$number1 <=> Gibt jeweils zurück, wenn $number1 kleiner, gleich oder größer ist $number2 -1,0,1
Neue Funktion
intdiv(dividend, divisor) – Runden des Divisionsergebnisses
intdiv(3, 2) //1
define kann Arrays definieren
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
Rückgabetypdeklaration
function test() :int
{
return 1; //true
return '1' //true
return 'string'; //false
}
Skalare Typdeklaration
Funktionstest(string $name) :int
{
return 22;
}
string integer float boolean
kann Kernfehler abfangen
Fehlerhierarchie
Auslösbarer
Fehler
ArithmeticError
DivisionByZeroError
AssertionError
ParseError
TypeError
Ausnahme
Optimierung der Kernsortierung
php5: array(1=>0, 0=>0) //Schnelle Sortierung (instabile Sortierung)
php7: array( 0=>0, 1=>0) //Schnelle Sortierauswahlsortierung (stabile Sortierung)
Es gibt mehr abstrakte Syntaxnummern (abstrakter Syntaxbaum) AST als PHP5
PHP -> Parser -> AST ->Opcodes -> Die Leistung ist gestiegen, der Speicherverbrauch ist ebenfalls gestiegen, aber er ist vernachlässigbar eine anonyme Klasse
function getAnonymousClass($config) {
return new class($config) {};
}
Eine Methode vorübergehend an das Objekt binden und call
$f = function() {
p($this->name);
};
Klasse F {
private $name = 'F';
}
$f->call(new F);
Einheitliche Syntaxvariablen
Klammern haben keinen Einfluss auf das Verhalten von links nach rechts
$a = 'b';
$b = ['1', '2', '3'];
var_dump($$a[1]);
var_dump(($$a) [1]);
php5:
Hinweis: Nicht initialisierter String-Offset: 1 in E:Program FilesphpStudyWWWtest.php in Zeile 4
Hinweis: Undefinierte Variable: in E:Program FilesphpStudyWWWtest.php online 4
NULL
Analysefehler: Syntaxfehler, unerwartetes „[“ in E:Program FilesphpStudyWWWtest.php in Zeile 4
php7: string(1) „2“ string(1) "2"
Ausdruck PHP5 PHP7
$$foo['bar']['baz'] ${$foo['bar']['baz']} )['bar ']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)[ 'baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz' ]()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
Über Namespaces
// Code vor PHP 7
use somenamespaceClassA;
use somenamespaceClassB;
use somenamespaceClassC as C;
Funktion somenamespacefn_a verwenden;
Funktion somenamespacefn_b verwenden;
Funktion somenamespacefn_c verwenden;
use const somenamespaceConstA;
use const somenamespaceConstB;
use const somenamespaceConstC;
// PHP 7-Code
use somenamespace{ClassA, ClassB, ClassC as C};
use function somenamespace{fn_a, fn_b, fn_c};
Änderung der Liste
1.
list($array[], $array[], $array[]) = [1, 2, 3];
var_dump($array);
php5: array(3) { [0]=> int(3) [1]=>(2) [2]=> php7: array(3) { [0]=> int(2) [2]=> Zuweisung eines Nullwerts zulassen
list() = $a;
list(,,) = $a;
list($x, list(), $y) = $a;
php7 meldet einen schwerwiegenden Fehler: Leere Liste kann nicht verwendet werden
3. String-Splitting wird nicht mehr unterstützt
$string = "xy";
list($x, $y) = $string ;
var_dump($x, $y);
php5: string(1) "x" string(1) "y"
php7: null null
foreach Modifizieren Die
-Variablenreferenz wirkt sich auf die Schleife im Array
$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array aus [1] = 1;
}
php5: int(0)
php7: int(0) int(1)
Referenzquellenadresse: http://www.php7.site/book/php7/variable-changes-22.html
Tipps zur Verbesserung der PHP-Leistung: http://www.laruence.com/2015/12/04/3086.html