Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die neuen Funktionen von PHP7

Detaillierte Einführung in die neuen Funktionen von PHP7

怪我咯
怪我咯Original
2017-07-05 10:28:341171Durchsuche

In diesem Artikel werden hauptsächlich Informationen zu den neuen Funktionen von PHP7 vorgestellt. Hier haben wir detaillierte Informationen und einfache Implementierungscodes zusammengestellt, um Ihnen das Erlernen und Referenzieren der neuen Funktionen zu erleichtern PHP

Das Projekt, das ich kürzlich durchgeführt habe, verwendete PHP7, aber ich habe das Gefühl, dass es viele neue Funktionen gibt, die nicht verwendet werden. Ich möchte nur einige neue Funktionen zusammenfassen, die verwendet werden können. Die zuvor verwendete Umgebung war PHP5.4. Hier werden nur die Funktionen zusammengefasst, die meiner Meinung nach im Projekt verwendet werden können PHP-Handbuch.

Generatoren (PHP 5 >= 5.5.0, PHP 7)


Generatoren werden durch Hinzufügen des Schlüsselworts yield unterstützt. Generatoren bieten eine einfachere Methode implementiert den Iterator und muss die Iterator-Schnittstelle nicht implementieren.

Die obige Routine gibt Folgendes aus:
<?php
function xrange($start, $limit, $step = 1) {
 for ($i = $start; $i <= $limit; $i += $step) {
  yield $i;
 }
}

echo &#39;Single digit odd numbers: &#39;;

/* 注意保存在内存中的数组绝不会被创建或返回 */
foreach (xrange(1, 9, 2) as $number) {
 echo "$number ";
}

Einstellige ungerade Zahlen: 1 3 5 7 9


Klicken Sie auf den Generator für Details

Endgültiges Schlüsselwort hinzugefügt (PHP 5 >= 5.5.0, PHP 7)


Try-Catch unterstützt jetzt endlich

foreach unterstützt jetzt for list() (PHP 5 >= 5.5.0, PHP 7)


Die foreach-Kontrollstruktur unterstützt jetzt die Aufteilung verschachtelter Arrays in separate Variablen über das list()-Konstrukt. Zum Beispiel:

Die obige Routine gibt Folgendes aus:
<?php
$array = [
 [1, 2],
 [3, 4],
];

foreach ($array as list($a, $b)) {
 echo "A: $a; B: $b\n";
}
?>

A: 1; B: 2

A: 3; B: 4



array_column (PHP 5 >= 5.5.0, PHP 7)
array_column – Gibt eine angegebene Spalte in einem Array zurück

Verwenden Sie Ausdrücke, um Konstanten zu definieren (PHP 5 >= 5.6.0, PHP 7)


In früheren PHP-Versionen mussten statische Werte verwendet werden, um Konstanten zu definieren, Eigenschaften deklarieren und

Funktionsparameter

Standardwert angeben. Sie können jetzt numerische Ausdrücke wie Zahlen, Zeichenfolgenliterale und andere Konstanten verwenden, um Konstanten zu definieren, Eigenschaften zu deklarieren und Standardwerte für Funktionsparameter festzulegen.

Die obige Routine gibt Folgendes aus:
<?php
const ONE = 1;
const TWO = ONE * 2;

class C {
 const THREE = TWO + 1;
 const ONE_THIRD = ONE / self::THREE;
 const SENTENCE = &#39;The value of THREE is &#39;.self::THREE;

 public function f($a = ONE + self::THREE) {
  return $a;
 }
}

echo (new C)->f()."\n";
echo C::SENTENCE;
?>

4


Der Wert von DREI ist 3


Jetzt können Sie bestehen const Schlüsselwort zum Definieren von Konstanten vom Typ Array.

Die obige Routine gibt Folgendes aus:
<?php
const ARR = [&#39;a&#39;, &#39;b&#39;];

echo ARR[0];
?>

a


Verwenden Sie den ...-Operator, um eine Parameterfunktion mit variabler Länge (PHP) zu definieren 5 > = 5.6.0, PHP 7)


Sie können jetzt den ...-Operator verwenden, um Parameterfunktionen variabler Länge zu implementieren, ohne sich auf func_get_args() verlassen zu müssen.

Die obige Routine gibt Folgendes aus:
<?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);
?>

$req: 1; $opt: 0; Anzahl der Parameter: 0

$req: 1; $opt: 2; der Parameter: 0

$req: 1; $opt: 2; $req: 1; $opt: 2; $req: 1; : 2; Anzahl der Parameter: 3


Verwenden Sie... den Operator für die Parametererweiterung (PHP 5 >= 5.6.0, PHP 7)

beim Aufruf von When Verwenden Sie bei der Verwendung von Funktionen den ...-Operator, um Arrays und durchlaufbare Objekte in Funktionsparameter zu erweitern. In anderen

Programmiersprachen
wie Ruby wird dies als Verkettungsoperator bezeichnet.

Die obige Routine gibt Folgendes aus:

6
<?php
function add($a, $b, $c) {
 return $a + $b + $c;
}

$operators = [2, 3];
echo add(1, ...$operators);
?>

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

use-Operator wurde erweitert, um den Import externer Funktionen und Konstanten in die Klasse zu unterstützen. Die entsprechenden Strukturen sind use function und use const.

Die obige Routine gibt Folgendes aus:

42
<?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();
}
?>

NameSpacef


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

DebugInfo() hinzufügen, mit dem die auszugebenden Attribute und Werte gesteuert werden können, wenn var_dump() zum Ausgeben von Objekten verwendet wird.

Die obige Routine gibt Folgendes aus:

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

Skalare Typdeklaration (PHP 7)

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

Skalare Typdeklaration hat Zwei Modi: obligatorischer (Standard) und strenger Modus. Die folgenden Typparameter sind jetzt verfügbar (entweder im erzwungenen oder strikten Modus): string, int, float und bool. Sie erweitern andere in PHP5 eingeführte Typen: Klassennamen, Schnittstellen, Arrays und Callback-Typen
.

Die obige Routine gibt Folgendes aus:

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

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

Um den strikten Modus zu verwenden, muss oben eine Deklarationsanweisung platziert werden die Datei. Dies bedeutet, dass Skalare strikt auf Dateibasis als konfigurierbar deklariert sind. Diese Direktive betrifft nicht nur die Typdeklaration der Parameter, sondern auch die Rückgabewertdeklaration der Funktion

(siehe Rückgabewerttypdeklaration, integrierte PHP-Funktionen und in Erweiterungen geladene PHP-Funktionen)

Rückgabewerttypdeklaration (PHP 7)

PHP 7 fügt Unterstützung für die Rückgabetypdeklaration hinzu. Ähnlich wie die Parametertypdeklaration gibt die Rückgabetypdeklaration den Typ des Rückgabewerts der Funktion an. Die verfügbaren Typen sind dieselben wie die in der Parameterdeklaration verfügbaren.
Die obige Routine gibt Folgendes aus:

Array

(
<?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]));
[0] => 6

[1] => 15

[ 2] => 24

)



Null-Koaleszenzoperator (PHP 7)

由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

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

太空船操作符(组合比较符)(PHP 7)

太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 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
?>

通过 define() 定义常量数组 (PHP 7)

Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const 定义。

<?php
define(&#39;ANIMALS&#39;, [
 &#39;dog&#39;,
 &#39;cat&#39;,
 &#39;bird&#39;
]);

echo ANIMALS[1]; // outputs "cat"
?>

匿名类 (PHP 7)

现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

<?php
interface Logger {
 public function log(string $msg);
}

class Application {
 private $logger;

 public function getLogger(): Logger {
   return $this->logger;
 }

 public function setLogger(Logger $logger) {
   $this->logger = $logger;
 }
}

$app = new Application;
$app->setLogger(new class implements Logger {
 public function log(string $msg) {
  echo $msg;
 }
});

var_dump($app->getLogger());
?>

以上例程会输出:

object(class@anonymous)#2 (0) {
}

Closure::call() (PHP 7)

Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。

<?php
class A {private $x = 1;}

// Pre PHP 7 code
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, &#39;A&#39;); // intermediate closure
echo $getX();

// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new A);

以上例程会输出:

1
1

为unserialize()提供过滤 (PHP 7)

这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。

<?php
// converts all objects into PHP_Incomplete_Class object
$data = unserialize($foo, ["allowed_classes" => false]);

// converts all objects into PHP_Incomplete_Class object except those of MyClass and MyClass2
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);

// default behaviour (same as omitting the second argument) that accepts all classes
$data = unserialize($foo, ["allowed_classes" => true]);

Group use declarations (PHP 7)

从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了。

<?php

// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP 7+ code
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};
?>

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die neuen Funktionen von PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn