Inhaltsverzeichnis
Flexible Heredoc- und Nowdoc-Syntax
Endkommas sind in Funktionsaufrufen zulässig
JSON_THROW_ON_ERROR
Upgrade PCRE2
list() 赋值引用
is_countable 函数
array_key_first(), array_key_last()
Argon2 和 Hash 密码加密性能增强
废弃并移除 image2wbmp()
废弃并移除大小写不敏感的常量
同站点 Cookie
FPM 更新
改进 Windows 下的文件删除
结束语
Heim Backend-Entwicklung PHP-Tutorial Ein Artikel, der Ihnen hilft, das PHP 7.3-Update zu verstehen

Ein Artikel, der Ihnen hilft, das PHP 7.3-Update zu verstehen

Jun 19, 2019 am 09:59 AM
php

Ein Artikel, der Ihnen hilft, das PHP 7.3-Update zu verstehen

PHP ist immer noch ein starker Konkurrent zu anderen Skriptsprachen, vor allem aufgrund der schnellen Updates seines Kernwartungsteams.

Seit der Veröffentlichung von PHP 7.0 hat die Community die Geburt vieler neuer Funktionen miterlebt, die die Art und Weise, wie Entwickler PHP in ihren Projekten anwenden, erheblich verbessert haben. Der Hauptzweck dieser Verbesserungen besteht darin, die Leistung und Sicherheit von PHP-Anwendungen zu verbessern.

PHP hat kürzlich einen weiteren Meilenstein erreicht – die Veröffentlichung von PHP 7.3. Die neue Version bringt einige dringend benötigte Updates.

In diesem Artikel werde ich die neu eingeführten PHP 7.3-Funktionen und Updates besprechen. Die gute Nachricht ist, dass Sie die neue Version selbst auf Ihrem Testserver installieren und die neuen Funktionen ausprobieren können. Aber wie das alte Sprichwort sagt: Verwenden Sie niemals RC-Versionsaktualisierungen auf Produktionsservern, da diese Ihre bereits aktiven Anwendungen beschädigen könnten.

Hier sind einige der in Version 7.3 eingeführten Updates, die die Leistung von PHP 7.3 im Vergleich zu früheren Versionen deutlich verbessern.

  • Flexible Heredoc- und Nowdoc-Syntax
  • Nachgestellte Kommas in Funktionsaufrufen zulassen
  • JSON_THROW_ON_ERROR
  • PCRE2-Migrationen
  • list( ) Zuordnungsreferenz
  • is_countable-Funktionen
  • array_key_first(), array_key_last()
  • Argon2-Passwort-Hashing-Verbesserungen
  • veraltet und entfernt image2wbmp()
  • Veraltete und entfernte Konstanten, bei denen die Groß-/Kleinschreibung nicht beachtet wird
  • Cookies für die gleiche Website
  • FPM-Update
  • Verbesserte Dateilöschung unter Windows

Lassen Sie uns die einzelnen Punkte besprechen Die oben genannten Aktualisierungen werden nacheinander aktualisiert.

Flexible Heredoc- und Nowdoc-Syntax

Heredoc und Nowdoc-Syntax kann bei der Arbeit mit langen Zeichenfolgen mit mehreren Zeilen eine große Hilfe sein. Es erfordert, dass die Endkennung die erste Zeichenfolge sein sollte, die in einer neuen Zeile erscheint.

// 除了这样:

$query = <<<SQL

SELECT *

FROM `table`

WHERE `column` = true;

SQL;

// 这样也可以:

$query = <<<SQL

   SELECT *

   FROM `table`

   WHERE `column` = true;

   SQL;
Nach dem Login kopieren

Insgesamt schlägt dieses Update zwei Verbesserungen vor, wie folgt:

  1. Einrückung wird vor dem Schließen eines Bezeichners unterstützt
  2. Nach dem Schließen eines Bezeichners nicht mehr. Zeilenumbruch erzwingen

Im obigen Beispiel können Sie diese Änderungen leicht erkennen.

Endkommas sind in Funktionsaufrufen zulässig

Fügen Sie abschließende Kommas am Ende von Parameter-, Element- und Variablenlisten hinzu. Manchmal müssen wir eine große Anzahl von Elementen in Arrays und Funktionsaufrufen übergeben (insbesondere Variablenparameterfunktionen). Wenn ein Komma fehlt, wird ein Fehler gemeldet. In diesem Fall ist das abschließende Komma sehr nützlich. Diese Funktion ist in Arrays bereits zulässig, und ab PHP 7.2 unterstützt die Gruppierungs-Namespace-Syntax (Grouped Namespaces) auch abschließende Kommas.

use Foo\Bar\{
   Foo,
   Bar,
};

$foo = [
   &#39;foo&#39;,
   &#39;bar&#39;,
];
Nach dem Login kopieren

Das abschließende Komma ist sehr nützlich, wenn hier ein neuer Wert angehängt werden muss. Dies gilt insbesondere für variadische Funktionen wie unset().

unset(
   $foo,
   $bar,
   $baz,
);
Nach dem Login kopieren

Gleichzeitig ist dies auch ein Beispiel, das verwendet werden kann, wenn Sie die Funktion compact() verwenden, um einen Stapel von Variablen an die Vorlagen-Engine zu übergeben.

echo $twig->render(
   'index.html',
   compact(
       'title',
       'body',
       'comments',
   )
);
Nach dem Login kopieren

In manchen Situationen, in denen kontinuierliche oder gruppierte Daten erstellt werden müssen, wird die Funktion array_merge() häufig zum Zusammenführen von Arrays verwendet. Sie können auch ein abschließendes Komma verwenden:

$newArray = array_merge(
   $arrayOne,
   $arrayTwo,
   ['foo', 'bar'],
);
Nach dem Login kopieren

Ebenso können Sie diese Funktion verwenden, wenn Sie eine beliebige Methode, Funktion oder einen Abschluss aufrufen.

class Foo
{
 public function __construct(...$args) {
   //
 }

 public function bar(...$args) {
   //
 }

 public function __invoke(...$args) {
   //
 }
}

$foo = new Foo(
 'constructor',
 'bar',
);

$foo->bar(
 'method',
 'bar',
);

$foo(
 'invoke',
 'bar',
);
Nach dem Login kopieren

JSON_THROW_ON_ERROR

Parst JSON-Antwortdaten, es stehen zwei Funktionen json_encode() und json_decode() zur Verfügung. Leider verfügt keiner von ihnen über ein ordnungsgemäßes Fehlerauslösungsverhalten. json_encode gibt false nur bei einem Fehler zurück; json_decode gibt null bei einem Fehler zurück und null kann als zulässiger JSON-Wert verwendet werden. Die einzige Möglichkeit, einen Fehler zu erhalten, besteht darin, json_last_error() oder json_last_error_msg() aufzurufen, wodurch ein maschinenlesbarer bzw. menschenlesbarer globaler Fehlerstatus zurückgegeben wird.

Die von diesem RFC vorgeschlagene Lösung besteht darin, der JSON-Funktion eine neue JSON_THROW_ON_ERROR-Konstante hinzuzufügen, um den globalen Fehlerstatus zu ignorieren. Wenn ein Fehler auftritt, löst die JSON-Funktion eine JsonException-Ausnahme aus, die Ausnahmemeldung (message) ist der Rückgabewert von json_last_error() und der Ausnahmecode (code) ist der Rückgabewert von json_last_error_msg() . Das Folgende ist ein Beispielaufruf:

json_encode($data, JSON_THROW_ON_ERROR);

json_decode("invalid json", null, 512, JSON_THROW_ON_ERROR);

// 抛出 JsonException 异常
Nach dem Login kopieren

Upgrade PCRE2

PHP verwendet PCRE als Engine für reguläre Ausdrücke. Aber ab PHP 7.3 wird PCRE2 seine Talente als neue reguläre Engine zeigen. Daher müssen Sie vorhandene reguläre Ausdrücke migrieren, um den PCRE2-Regeln zu entsprechen. Diese Regeln sind aufdringlicher als zuvor. Sehen Sie sich bitte das folgende Beispiel an:

preg_match('/[\w-.]+/', '');
Nach dem Login kopieren

Dieser Ausdruck wird in der neuen Version von PHP nicht übereinstimmen und keine Warnung auslösen. Aufgrund der strengen Anforderungen von PCRE2 müssen Bindestriche (-), die abgeglichen werden müssen, anstatt zur Darstellung von Bereichen verwendet zu werden, an das Ende verschoben oder mit Escapezeichen versehen werden.

Nach dem Update auf PCRE2 10.x werden die folgenden Funktionen und mehr unterstützt:

  • 相对后向引用 \g{+2}(等效于已存在的 \g{-2}
  • PCRE2 版本检查 (?(VERSION>=x)...)
  • (*NOTEMPTY)(*NOTEMPTY_ATSTART) 告知引擎勿返回空匹配
  • (*NO_JIT) 禁用 JIT 优化
  • (*LIMIT_HEAP=d) 限制堆大小为 d KB
  • (*LIMIT_DEPTH=d) 设置回溯深度限制为 d
  • (*LIMIT_MATCH=d) 设置匹配数量限制为 d

译者注:国内正则术语参差不一,「后向引用」—— Back References,又称「反向引用」、「回溯引用」等,此处参考 PHP 官方手册的中文译本。

list() 赋值引用

PHP 中的 list() 现在可以赋值给引用,在当前版本中 list() 中赋值不能使用引用,在 PHP 7.3 中将允许使用引用,新改进的语法如下:

$array = [1, 2];
list($a, &$b) = $array;
Nach dem Login kopieren

相当于

$array = [1, 2];
$a = $array[0];
$b =& $array[1];
Nach dem Login kopieren

在 PHP 7.3 的变更中,我们还可以与 foreach() 方法一起嵌套使用

$array = [[1, 2], [3, 4]];
foreach ($array as list(&$a, $b)) {
   $a = 7;
}
var_dump($array);
Nach dem Login kopieren

is_countable 函数

在 PHP 7.2 中,用 count() 获取对象和数组的数量。如果对象不可数,PHP 会抛出警告⚠️ 。所以需要检查对象或者数组是否可数。 PHP 7.3 提供新的函数 is_countable() 来解决这个问题。

该 RFC 提供新的函数 is_countable(),对数组类型或者实现了 Countable 接口的实例的变量返回 true 。

之前:

if (is_array($foo) || $foo instanceof Countable) {
   // $foo 是可数的
}
Nach dem Login kopieren

之后:

if (is_countable($foo)) {
   // $foo 是可数的
}
Nach dem Login kopieren

array_key_first(), array_key_last()

当前版本的 PHP 允许使用 reset()end()key() 等方法,通过改变数组的内部指针来获取数组首尾的键和值。现在,为了避免这种内部干扰,PHP 7.3 推出了新的函数来解决这个问题:

  • $key = array_key_first($array); 获取数组第一个元素的键名
  • $key = array_key_last($array); 获取数组最后一个元素的键名

让我们看一个例子:

// 关联数组的用法
$array = ['a' => 1, 'b' => 2, 'c' => 3];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array);

assert($firstKey === 'a');
assert($lastKey === 'c');

// 索引数组的用法
$array = [1 => 'a', 2 => 'b', 3 => 'c'];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array);

assert($firstKey === 1);
assert($lastKey === 3);
Nach dem Login kopieren

译者注:array_value_first()array_value_last() 并没有通过 RFC 表决;因此 PHP 7.3 内仅提供了 array_key_first() 以及 array_key_last() 函数。
参考链接:https://wiki.php.net/rfc/array_key_first_l...

Argon2 和 Hash 密码加密性能增强

在PHP的早期版本中,我们增加了Argon2和哈希密码加密算法,这是一种使用哈希加密算法来保护密码的现代算法。它有三种不同的类型,Argon2i,Argon2d和Argon 2id。 我们针对Argon2i密码散列和基于密码的密钥生成进行了优化。 Argon2d性能更快,并使用依赖于内存的数据访问。 Argon2i使用与内存无关的数据访问。 Argon2id是Argon2i和Argon2d的混合体,使用依赖于数据和与数据独立的存储器访问的组合。

password_hash():

Argon2id现在是在paswword_ *函数中使用的推荐的Argon2变量。

具有自定义成员方法的名称的Argon2id与PASSWORD_ARGON2I的使用方法相同
password_hash('password',PASSWORD_ARGON2ID,['memory_cost'=> 1 << 17,&#39;time_cost&#39;=> 4,'threads'=> 2]);
Nach dem Login kopieren

password_verify();

除了Argon2i之外,password_verify()函数也适用于Argon2id。

password_needs_rehash();

此函数也将接受Argon2id哈希值,如果任何变量成员发生变化,则返回true。

$hash = password_hash('password', PASSWORD_ARGON2ID);
password_needs_rehash($hash, PASSWORD_ARGON2ID); // 返回假
password_needs_rehash($hash, PASSWORD_ARGON2ID, ['memory_cost' => 1<<17]); // 返回真
Nach dem Login kopieren

废弃并移除 image2wbmp()

该函数能够将图像输出为 WBMP 格式。另一个名为 imagewbmp() 的函数也同样具备单色转换的作用。因此,出于重复原因,image2wbmp() 现已被废弃,你可使用 imagewbmp() 代替它。此函数被弃用后,再次调用它将会触发已弃用警告。待后续此函数被移除后,再次调用它将会触发致命错误。

废弃并移除大小写不敏感的常量

使用先前版本的 PHP,你可以同时使用大小写敏感和大小写不敏感的常量。但大小写不敏感的常量会在使用中造成一点麻烦。所以,为了解决这个问题,PHP 7.3 废弃了大小写不敏感的常量。

原先的情况是:

  • 类常量始终为「大小写敏感」。
  • 使用 const 关键字定义的全局常量始终为「大小写敏感」。注意此处仅仅是常量自身的名称,不包含命名空间名的部分,PHP 的命名空间始终为「大小写不敏感」。
  • 使用 define() 函数定义的常量默认为「大小写敏感」。
  • 使用 define() 函数并将第三个参数设为 true 定义的常量为「大小写不敏感」。

如今 PHP 7.3 提议废弃并移除以下用法:

  • In PHP 7.3: 废弃使用 true 作为 define() 的第三个参数。
  • In PHP 7.3: 废弃使用与定义时的大小写不一致的名称,访问大小写不敏感的常量。truefalse 以及 null 除外。

PHP 7.3 在建议在使用 cookies 时,增加同站点标志。这个 RFC 会影响4个系统函数。

  1. setcookie
  2. setrawcookie
  3. session_set_cookie_params
  4. session_get_cookie_params

这个影响会在两种情况下起作用。其中一种方式会添加函数的新参数
,另一种方式允许以数组形式的选项代替其他单独选项。

bool setcookie(

   string $name

   [, string $value = ""

   [, int $expire = 0

   [, string $path = ""

   [, string $domain = ""

   [, bool $secure = false

   [, bool $httponly = false ]]]]]]

)

bool setcookie (

   string $name

   [, string $value = ""

   [, int $expire = 0

   [, array $options ]]]

)

// 两种方式均可.
Nach dem Login kopieren

FPM 更新

FastCGI 进程管理器也进行了更新,现在提供了新的方式来记录 FPM 日志。

log_limit: 设置允许的日志长度,可以超过 1024 字符。

log_buffering: 允许不需要额外缓冲去操作日志。

decorate _workers_output: 当启用了 catch_workers_output 时,系统会去禁用渲染输出。

改进 Windows 下的文件删除

官方文档所述:

默认情况下,文件描述符以共享读、写、删除的方式去操作。 这很有效的去映射 POSIX 并允许去删除正在使用中的文件。但这并不是100%都是一样的,不同的平台可能仍存在一些差异。删除操作之后,文件目录仍存在直到所有的文件操作被关闭。

结束语

之前我们已经讲解了最新版本的 PHP7.3 的特点,包含了许多新增跟弃用的功能。这些功能都可以在 php.net 网站上找到,并且已经合并到主分支上了。你现在就可以使用这些新功能部署在自己的服务器上,你也可以打开官方RFC页面查阅每一个详细版本。如果你对着新版 PHP7.3 有任何问题,你可以在评论下写下自己的想法。

相关PHP视频教程推荐:《PHP视频教程》

Das obige ist der detaillierte Inhalt vonEin Artikel, der Ihnen hilft, das PHP 7.3-Update zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles