Heim > Backend-Entwicklung > PHP-Tutorial > Zusammenfassung der neuen Syntaxfunktionen in PHP7.0 und PHP7.1

Zusammenfassung der neuen Syntaxfunktionen in PHP7.0 und PHP7.1

不言
Freigeben: 2023-04-03 17:18:01
Original
2944 Leute haben es durchsucht

Der Inhalt dieses Artikels ist eine Zusammenfassung der neuen Syntaxfunktionen in PHP7.0 und PHP7.1. Ich hoffe, dass er für Freunde hilfreich ist.

Neue Funktionen von PHP7.0:

1. Null-Koaleszenzoperator ( ? ?)

Vereinfachte Beurteilung

$param = $_GET['param'] ?? 1;
Nach dem Login kopieren

entspricht:

$param = isset($_GET['param']) ? $_GET['param'] : 1;
Nach dem Login kopieren

2 Arten von Variablentypdeklarationen

Modus: obligatorischer (Standard) und strikter Modus
Typ: string, int, float und bool

function add(int $a) { 
    return 1+$a; 
} 
var_dump(add(2);
Nach dem Login kopieren

3. Rückgabewerttypdeklaration

Funktion und anonym Funktion Sie können den Typ des Rückgabewerts angeben

function show(): array { 
    return [1,2,3,4]; 
}

function arraysSum(array ...$arrays): array {
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}
Nach dem Login kopieren

4. Raumschiffoperator (kombinierter Vergleichsoperator)

Der Raumschiffoperator wird zum Vergleichen zweier Ausdrücke verwendet. Es gibt -1, 0 oder 1 zurück, wenn a größer, gleich oder kleiner als b ist. Das Vergleichsprinzip folgt den regulären Vergleichsregeln von 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
Nach dem Login kopieren

5. Anonyme Klassen

unterstützt jetzt die Instanziierung einer anonymen Klasse durch eine neue Klasse, die verwendet werden kann, um einige vollständige Klassen zu ersetzen, die laut Definition „nach Gebrauch brennen“.

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());
Nach dem Login kopieren

6. Unicode-Codepunkt-Übersetzungssyntax

Dies akzeptiert einen Unicode-Codepunkt in hexadezimaler Form und gibt eine UTF-8-Zeichenfolge in doppelten Anführungszeichen oder in einem Heredoc-codierten Format aus. Jeder gültige Codepunkt wird akzeptiert und die führende 0 kann weggelassen werden.

 echo "\u{9876}"
Nach dem Login kopieren

Alte Versionsausgabe: u{9876}
Neue Versionseingabe: top

7. Abschluss::call()

Abschluss :: call() hat jetzt eine bessere Leistung und ist eine kurze und prägnante Möglichkeit, eine Methode vorübergehend an einen Abschluss eines Objekts zu binden und es aufzurufen.

class Test {
    public $name = "lixuan";
}

//PHP7和PHP5.6都可以
$getNameFunc = function () {
    return $this->name;
};
$name = $getNameFunc->bindTo(new Test, &#39;Test&#39;);
echo $name();
//PHP7可以,PHP5.6报错
$getX = function () {
    return $this->name;
};
echo $getX->call(new Test);
Nach dem Login kopieren

8. Filterung für unserialize() bereitstellen

Diese Funktion soll eine sicherere Möglichkeit zum Entpacken unzuverlässiger Daten bieten. Es verhindert eine potenzielle Code-Injection durch Whitelisting.

//将所有对象分为__PHP_Incomplete_Class对象
$data = unserialize($foo, ["allowed_classes" => false]);
//将所有对象分为__PHP_Incomplete_Class 对象 除了ClassName1和ClassName2
$data = unserialize($foo, ["allowed_classes" => ["ClassName1", "ClassName2"]);
//默认行为,和 unserialize($foo)相同
$data = unserialize($foo, ["allowed_classes" => true]);
Nach dem Login kopieren

9. IntlChar

Die neu hinzugefügte IntlChar-Klasse soll mehr ICU-Funktionen verfügbar machen. Diese Klasse selbst definiert viele statische Methoden zum Bearbeiten von Unicode-Zeichen aus mehreren Zeichensätzen. Intl ist eine Pecl-Erweiterung. Sie muss vor der Verwendung in PHP kompiliert werden. Sie können auch apt-get/yum/port install php5-intl

printf(&#39;%x&#39;, IntlChar::CODEPOINT_MAX);
echo IntlChar::charName(&#39;@&#39;);
var_dump(IntlChar::ispunct(&#39;!&#39;));
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:
10ffff
KOMMERZIELL BEI
bool(true)

10. Expectation

Expectation ist eine Methode, die die vorherige Assert() rückwärts verwendet und erweitert. Dadurch wird die Aktivierung von Behauptungen in der Produktion kostengünstiger und es besteht die Möglichkeit, bestimmte Ausnahmen auszulösen, wenn Behauptungen fehlschlagen. Die ältere Version der API wird aus Kompatibilitätsgründen weiterhin beibehalten, und affirm() ist jetzt ein Sprachkonstrukt, das es ermöglicht, dass das erste Argument ein Ausdruck und nicht nur eine zu berechnende Zeichenfolge oder ein zu testender boolescher Wert ist.

ini_set(&#39;assert.exception&#39;, 1);
class CustomError extends AssertionError {}
assert(false, new CustomError(&#39;Some error message&#39;));
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:
Schwerwiegender Fehler: Uncaught CustomError: Irgendeine Fehlermeldung

11. Gruppenverwendungsdeklarationen

Von der Mit demselben Namespace importierte Klassen, Funktionen und Konstanten können jetzt alle auf einmal mit einer einzigen Use-Anweisung importiert werden.

//PHP7之前
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;

// PHP7之后
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};
Nach dem Login kopieren

12. intp()

empfängt zwei Parameter als Dividend und Divisor und gibt den ganzzahligen Teil ihres Divisionsergebnisses zurück.

var_dump(intp(7, 2));
Nach dem Login kopieren

Ausgabe int(3)

13. CSPRNG

Zwei neue Funktionen hinzufügen: random_bytes() und random_int() Kann verschlüsselt werden geschützte Ganzzahlen und Zeichenfolgen. Kurz gesagt, Zufallszahlen werden sicher.
random_bytes – kryptografisch geschützte pseudozufällige Zeichenfolge
random_int – kryptografisch geschützte pseudozufällige Ganzzahl

14, preg_replace_callback_array()

Eine neue Funktion preg_replace_callback_array( ) wurde hinzugefügt. Die Verwendung dieser Funktion kann den Code eleganter machen, wenn die Funktion preg_replace_callback() verwendet wird. Vor PHP7 wurde die Callback-Funktion für jeden regulären Ausdruck aufgerufen und die Callback-Funktion war in einigen Zweigen kontaminiert.

15. Sitzungsoptionen

Jetzt kann die Funktion session_start() ein Array als Parameter empfangen, das die Sitzungskonfigurationselemente in php.ini überschreiben kann.
Setzen Sie beispielsweise „cache_limiter“ auf „privat“ und schließen Sie die Sitzung sofort nach dem Lesen.

session_start([&#39;cache_limiter&#39; => &#39;private&#39;,
               &#39;read_and_close&#39; => true,
]);
Nach dem Login kopieren

16. Rückgabewert des Generators

Das Konzept des Generators wurde in PHP5.5 eingeführt. Jedes Mal, wenn die Generatorfunktion ausgeführt wird, erhält sie einen durch yield identifizierten Wert. In PHP7 kann nach Abschluss der Generatoriteration der Rückgabewert der Generatorfunktion abgerufen werden. Erhalten durch Generator::getReturn().

function generator() {
    yield 1;
    yield 2;
    yield 3;
    return "a";
}

$generatorClass = ("generator")();
foreach ($generatorClass as $val) {
    echo $val ." ";

}
echo $generatorClass->getReturn();
Nach dem Login kopieren

Die Ausgabe ist: 1 2 3 a

17 Einführen anderer Generatoren in den Generator

Sie können einen anderen oder mehrere Generatoren einführen. Schreiben Sie einfach yield von functionName1

function generator1() {
    yield 1;
    yield 2;
    yield from generator2();
    yield from generator3();
}

function generator2() {
    yield 3;
    yield 4;
}

function generator3() {
    yield 5;
    yield 6;
}

foreach (generator1() as $val) {
    echo $val, " ";
}
Nach dem Login kopieren

Ausgabe: 1 2 3 4 5 6

18. Definieren Sie ein konstantes Array

über define()
define(&#39;ANIMALS&#39;, [&#39;dog&#39;, &#39;cat&#39;, &#39;bird&#39;]);
echo ANIMALS[1]; // outputs "cat"
Nach dem Login kopieren

Neue Funktionen von php7.1:

1. Nullable-Typ

Typen dürfen jetzt null sein, wenn diese Funktion aktiviert ist aktiviert ist, sind die übergebenen Parameter oder das von der Funktion zurückgegebene Ergebnis entweder der angegebene Typ oder null. Sie können einen Typ nullbar machen, indem Sie ihm ein Fragezeichen voranstellen.

function test(?string $name) {
    var_dump($name);
}
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

string(5) "tpunt"
NULL
Uncaught Error: Too few arguments to function test(), 0 passed in...
Nach dem Login kopieren

2、Void 函数

在PHP 7 中引入的其他返回值类型的基础上,一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,null 不是一个合法的返回值。

function swap(&$left, &$right) : void {
    if ($left === $right) {
        return;
    }
    $tmp = $left;
    $left = $right;
    $right = $tmp;
}
$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);
Nach dem Login kopieren

以上例程会输出:

null
int(2)
int(1)
Nach dem Login kopieren

试图去获取一个 void 方法的返回值会得到 null ,并且不会产生任何警告。这么做的原因是不想影响更高层次的方法。

3、短数组语法 Symmetric array destructuring

短数组语法([])现在可以用于将数组的值赋给一些变量(包括在foreach中)。 这种方式使从数组中提取值变得更为容易。

$data = [
    [&#39;id&#39; => 1, &#39;name&#39; => &#39;Tom&#39;],
    [&#39;id&#39; => 2, &#39;name&#39; => &#39;Fred&#39;],
];
while ([&#39;id&#39; => $id, &#39;name&#39; => $name] = $data) {
    // logic here with $id and $name
}
Nach dem Login kopieren

4、类常量可见性

现在起支持设置类常量的可见性。

class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}
Nach dem Login kopieren

5、iterable 伪类

现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。

function iterator(iterable $iter) {
    foreach ($iter as $val) {
        //
    }
}
Nach dem Login kopieren

6、多异常捕获处理

一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。

try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
} catch (\Exception $e) {
    // ...
}
Nach dem Login kopieren

7、list()现在支持键名

现在list()支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)

$data = [
    [&#39;id&#39; => 1, &#39;name&#39; => &#39;Tom&#39;],
    [&#39;id&#39; => 2, &#39;name&#39; => &#39;Fred&#39;],
];
while (list(&#39;id&#39; => $id, &#39;name&#39; => $name) = $data) {
    // logic here with $id and $name
}
Nach dem Login kopieren

8、支持为负的字符串偏移量

现在所有接偏移量的内置的基于字符串的函数都支持接受负数作为偏移量,包括数组解引用操作符([]).

var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));
Nach dem Login kopieren

以上例程会输出:

string (1) "e"
int(3)
Nach dem Login kopieren

9、ext/openssl 支持 AEAD

通过给openssl_encrypt()和openssl_decrypt() 添加额外参数,现在支持了AEAD (模式 GCM and CCM)。
通过 Closure::fromCallable() 将callables转为闭包
Closure新增了一个静态方法,用于将callable快速地 转为一个Closure 对象。

class Test {
    public function exposeFunction() {
        return Closure::fromCallable([$this, &#39;privateFunction&#39;]);
    }
    private function privateFunction($param) {
        var_dump($param);
    }
}
$privFunc = (new Test)->exposeFunction();
$privFunc(&#39;some value&#39;);
Nach dem Login kopieren

以上例程会输出:

string(10) "some value"
Nach dem Login kopieren

10、异步信号处理 Asynchronous signal handling

A new function called pcntl_async_signals() has been introduced to enable asynchronous signal handling without using ticks (which introduce a lot of overhead).
增加了一个新函数 pcntl_async_signals()来处理异步信号,不需要再使用ticks(它会增加占用资源)

pcntl_async_signals(true); // turn on async signals
pcntl_signal(SIGHUP,  function($sig) {
    echo "SIGHUP\n";
});
posix_kill(posix_getpid(), SIGHUP);
Nach dem Login kopieren

以上例程会输出:

SIGHUP
Nach dem Login kopieren

11、HTTP/2 服务器推送支持 ext/curl

Support for server push has been added to the CURL extension (requires version 7.46 and above). This can be leveraged through the curl_multi_setopt() function with the new CURLMOPT_PUSHFUNCTION constant. The constants CURL_PUST_OK and CURL_PUSH_DENY have also been added so that the execution of the server push callback can either be approved or denied. 
翻译: 
对于服务器推送支持添加到curl扩展(需要7.46及以上版本)。 
可以通过用新的CURLMOPT_PUSHFUNCTION常量 让curl_multi_setopt()函数使用。 
也增加了常量CURL_PUST_OK和CURL_PUSH_DENY,可以批准或拒绝 服务器推送回调的执行

相关文章推荐:

php7和php5有什么不同之处?php5与php7之间的对比

PHP新特性:finally关键字的用法

Das obige ist der detaillierte Inhalt vonZusammenfassung der neuen Syntaxfunktionen in PHP7.0 und PHP7.1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage