{"id":67410,"date":"2023-11-29T08:24:40","date_gmt":"2023-11-29T07:24:40","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=67410&#038;preview=true&#038;preview_id=67410"},"modified":"2023-12-01T11:15:25","modified_gmt":"2023-12-01T10:15:25","slug":"php-8-3","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/","title":{"rendered":"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?"},"content":{"rendered":"<p>PHP 8.3 wurde p\u00fcnktlich am 23. November ver\u00f6ffentlicht und enth\u00e4lt viele neue Funktionen und Verbesserungen seit der <a href=\"https:\/\/kinsta.com\/de\/blog\/php-8-2\/\">Einf\u00fchrung von PHP 8.2<\/a>. Auch wenn es sich offiziell um eine kleinere Version handelt, k\u00f6nnten sich einige der \u00c4nderungen in 8.3 direkt auf deine Arbeit mit PHP auswirken &#8211; und dir vielleicht helfen, schneller und mit weniger Fehlern zu programmieren.<\/p>\n<p>Werfen wir einen Blick auf die gro\u00dfen &#8211; und manchmal auch nicht so gro\u00dfen &#8211; \u00c4nderungen, die mit dieser neuen Version einhergehen.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Neue Funktionen und Verbesserungen in PHP 8.3<\/h2>\n<p>Beginnen wir mit den Funktionen von PHP 8.3, die die meisten Schlagzeilen machen.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"-1\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Typisierte Klassenkonstanten<\/h3>\n<p>Die M\u00f6glichkeit, Typen f\u00fcr Klasseneigenschaften zu deklarieren, steht uns seit <a href=\"https:\/\/kinsta.com\/de\/blog\/php-7-4\/\">PHP 7.4<\/a> zur Verf\u00fcgung. Doch trotz zahlreicher Verbesserungen der PHP-Typisierung im Laufe der Jahre wurde sie nicht auf Konstanten ausgeweitet &#8211; bis jetzt.<\/p>\n<p>Klassenkonstanten &#8211; und dazu geh\u00f6ren auch Interface-, Trait- und Enum-Konstanten &#8211; k\u00f6nnen in PHP 8.3 typisiert werden, so dass es unwahrscheinlicher wird, dass Entwickler\/innen von der Absicht abweichen, die hinter der urspr\u00fcnglichen Deklaration einer Konstante steht.<\/p>\n<p>Hier ist ein einfaches Beispiel mit einer Schnittstelle:<\/p>\n<pre><code class=\"language-php\">\/\/ Legal:\ninterface ConstTest {\n    \/\/ Declared type and value are both strings\n    const string VERSION = \"PHP 8.3\";\n}\n\n\/\/ Illegal:\ninterface ConstTest {\n    \/\/ Type and value mismatch in this initial declaration\n    const float VERSION = \"PHP 8.3\";\n}<\/code><\/pre>\n<p>Der wahre Wert dieser <a href=\"https:\/\/wiki.php.net\/rfc\/typed_class_constants\" target=\"_blank\" rel=\"noopener noreferrer\">typisierten Klassenkonstanten<\/a> zeigt sich bei der Arbeit in Klassen, die von den Basisdeklarationen abgeleitet sind. W\u00e4hrend eine Childclass einer Konstante h\u00e4ufig einen neuen Wert zuweisen kann, kann PHP 8.3 verhindern, dass der Typ der Konstante versehentlich ge\u00e4ndert wird, so dass sie nicht mehr mit der urspr\u00fcnglichen Deklaration kompatibel ist:<\/p>\n<pre><code class=\"language-php\">class ConstTest {\n    const string VERSION = \"PHP 8.2\";\n}\n\nclass MyConstTest extends ConstTest {\n\n    \/\/ Legal:\n    \/\/ It's OK to change the value of VERSION here\n    const string VERSION = \"PHP 8.3\";\n\n    \/\/ Illegal:\n    \/\/ Type must be declared if it was specified in the base class\n    const VERSION = \"PHP 8.3\";\n\n    \/\/ Illegal:\n    \/\/ In this case, we can't change the type declared in the \n    \/\/ base class, even if the new type and its value are compatible.\n    const float VERSION = 8.3;\n}<\/code><\/pre>\n<p>Denke daran, dass der Typ, der einer Klassenkonstante zugewiesen wird, variieren kann, wenn mehrere Typen &#8222;eingegrenzt&#8220; oder ein ansonsten kompatibler Typ verwendet wird:<\/p>\n<pre><code class=\"language-php\">class ConstTest {\n    const string|float VERSION = \"PHP 8.2\";\n}\n\nclass MyConstTest extends ConstTest {\n\n    \/\/ Legal:\n    \/\/ Here, it's OK to narrow the type declaration to string or float\n    const string VERSION = \"PHP 8.3\";\n    const float VERSION = 8.3;\n\n    \/\/ Legal:\n    \/\/ Value could be an int, but it's compatible with float \n    const float VERSION = 8;\n\n    \/\/ Illegal:\n    \/\/ We can't widen the type options here to include int\n    const string|float|int VERSION = 8;\n}<\/code><\/pre>\n<p>Zwei Typen, die f\u00fcr andere Eigenschaften bei der Validierung von R\u00fcckgabewerten unterst\u00fctzt werden &#8211; <code>void<\/code> und <code>never<\/code> &#8211; werden nicht als Klassenkonstanten-Typen unterst\u00fctzt.<\/p>\n<h3>Eine neue <code>json_validate()<\/code> Funktion<\/h3>\n<p>Wenn du mit JSON-kodierten Daten arbeitest, ist es gut zu wissen, ob die Nutzdaten syntaktisch g\u00fcltig sind, bevor du versuchst, etwas mit ihnen zu machen.<\/p>\n<p>In fr\u00fcheren PHP-Versionen haben Entwickler die Funktion <code>json_decode()<\/code> verwendet und auf Fehler gepr\u00fcft, w\u00e4hrend diese Funktion versucht hat, JSON-Daten in assoziative Arrays oder Objekte zu verwandeln. Die neue Funktion von PHP 8.3 <code><a href=\"https:\/\/www.php.net\/manual\/en\/function.json-validate.php\" target=\"_blank\" rel=\"noopener noreferrer\">json_validate()<\/a><\/code> Funktion f\u00fchrt die Fehlerpr\u00fcfung durch, ohne den gesamten Speicher zu verbrauchen, der zum Aufbau dieser Array- oder Objektstrukturen erforderlich ist.<\/p>\n<p>In der Vergangenheit h\u00e4ttest du also eine JSON-Nutzlast etwa so validieren k\u00f6nnen:<\/p>\n<pre><code class=\"language-php\">$obj = json_decode($maybeJSON);\n\nif (json_last_error() === JSON_ERROR_NONE) {\n    \/\/ Probably do something with $obj   \n}<\/code><\/pre>\n<p>Wenn du im obigen Beispiel nicht sofort etwas mit <code>$obj<\/code> machen willst, werden eine Menge Ressourcen verbraucht, nur um die G\u00fcltigkeit der urspr\u00fcnglichen JSON-Nutzdaten zu best\u00e4tigen. In PHP 8.3 kannst du so etwas tun und etwas Speicher sparen:<\/p>\n<pre><code class=\"language-php\">if (json_validate($maybeJSON)) {\n    \/\/ Do something with $maybeJSON   \n}<\/code><\/pre>\n<p><strong>Hinweis:<\/strong> Es macht nicht viel Sinn, <code>json_validate()<\/code> zu verwenden und die Daten dann sofort durch <code>json_decode()<\/code> laufen zu lassen, wobei die Speicherressourcen von decode sowieso verbraucht werden. Es ist wahrscheinlicher, dass du die neue Funktion verwendest, um das JSON zu validieren, bevor du es irgendwo speicherst oder als Antwort auf eine Anfrage \u00fcbermittelst.<\/p>\n<h3>Deep Cloning von <code>readonly<\/code> Eigenschaften<\/h3>\n<p>Die M\u00f6glichkeit, einzelne Klasseneigenschaften als <code>readonly<\/code> zu deklarieren, wurde in <a href=\"https:\/\/kinsta.com\/de\/blog\/php-8-1\/\">PHP 8.1<\/a> eingef\u00fchrt. Mit PHP 8.2 wurde die M\u00f6glichkeit eingef\u00fchrt, dieses Attribut einer <a href=\"https:\/\/kinsta.com\/de\/blog\/php-8-2\/#new-readonly-classes\" target=\"_blank\" rel=\"noopener noreferrer\">ganzen Klasse<\/a> zuzuweisen. Viele Entwickler waren jedoch der Meinung, dass die Einschr\u00e4nkungen bei der Arbeit mit Klassen, die solche Eigenschaften enthalten, einer sinnvollen Programmierung im Wege stehen.<\/p>\n<p>In einem RFC zur <a href=\"https:\/\/wiki.php.net\/rfc\/readonly_amendments\" target=\"_blank\" rel=\"noopener noreferrer\">\u00c4nderung des Verhaltens von <code>readonly<\/code><\/a> wurden zwei Vorschl\u00e4ge gemacht:<\/p>\n<ol>\n<li>Erlaube Klassen, die nicht <code>readonly<\/code> sind, Klassen zu erweitern<\/li>\n<li>Erlaube, dass die Eigenschaften von <code>readonly<\/code> beim Klonen reinitialisiert werden<\/li>\n<\/ol>\n<p>Der zweite Vorschlag hat es in PHP 8.3 geschafft. Der neue Ansatz erlaubt es, Instanzen einer Klasse mit <code>readonly<\/code> Eigenschaften innerhalb der <code>__clone<\/code> magic Methode zu reinitialisieren (auch \u00fcber Funktionen, die von <code>__clone<\/code> aus aufgerufen werden).<\/p>\n<p>Dieses Codebeispiel aus dem RFC zeigt, wie es funktioniert:<\/p>\n<pre><code class=\"language-php\">class Foo {\n    public function __construct(\n        public readonly DateTime $bar,\n        public readonly DateTime $baz\n    ) {}\n \n    public function __clone() {\n        \/\/ $bar will get a new DateTime when clone is invoked\n        $this-&gt;bar = clone $this-&gt;bar; \n\n        \/\/ And this function will be called\n        $this-&gt;cloneBaz();\n    }\n \n    private function cloneBaz() {\n       \/\/ This is legal when called from within __clone\n        unset($this-&gt;baz); \n    }\n}\n \n$foo = new Foo(new DateTime(), new DateTime());\n$foo2 = clone $foo;<\/code><\/pre>\n<h3>Neues <code>#[\\Override]<\/code> Attribut<\/h3>\n<p>Bei der Implementierung von Schnittstellen in PHP stellen Programmierer detaillierte Funktionen f\u00fcr die in diesen Schnittstellen genannten Methoden bereit. Bei der Erstellung einer Instanz einer Klasse k\u00f6nnen Programmierer eine \u00fcbergeordnete Methode au\u00dfer Kraft setzen, indem sie eine alternative Version mit demselben Namen und einer kompatiblen Signatur in der Child-Klasse erstellen.<\/p>\n<p>Ein Problem besteht darin, dass Programmierer <em>denken<\/em> k\u00f6nnten<em>, dass<\/em> sie eine Schnittstellenmethode implementieren oder eine \u00fcbergeordnete Methode au\u00dfer Kraft setzen, obwohl sie es nicht tun. Es kann sein, dass sie eine v\u00f6llig neue Methode erstellen, weil sie sich im Namen der Child-Methode vertippt haben oder weil die Methoden im Code der Parent-Klasse entfernt oder umbenannt wurden.<\/p>\n<p>PHP 8.3 f\u00fchrt das Attribut <code>#[\\Override]<\/code> ein, um Programmierern zu helfen, deutlich zu machen, dass eine Methode eine gewisse Abstammung innerhalb des Codes haben muss.<\/p>\n<p>Hier ist ein einfaches Beispiel:<\/p>\n<pre><code class=\"language-php\">class A {\n    protected function ovrTest(): void {}\n}\n\n\/\/ This will work because ovrTest() \n\/\/ can be found in the parent class\nclass B extends A {\n    #[\\Override]\n    public function ovrTest(): void {}\n}\n\n\/\/ This will fail because ovrBest() \n\/\/ (probably a typo) is not in the parent\nclass C extends A {\n    #[\\Override]\n    public function ovrBest(): void {}\n}<\/code><\/pre>\n<h3>Dynamische Abfrage von Klassenkonstanten und Enum-Mitgliedern<\/h3>\n<p>Anders als bei anderen Eigenschaften im PHP-Code war das Abrufen von Klassenkonstanten und Enum-Mitgliedern mit Variablennamen bisher etwas umst\u00e4ndlich. Vor PHP 8.3 konntest du das mit der Funktion <code>constant()<\/code> wie folgt machen:<\/p>\n<pre><code class=\"language-php\">class MyClass {\n    public const THE_CONST = 9;\n}\n\nenum MyEnum int {\n    case FirstMember = 9;\n    case SecondMember = 9;\n}\n\n$constantName = 'THE_CONST';\n$memberName = 'FirstMember';\n\necho constant('MyClass::' . $constantName);\necho constant('MyEnum::' . $memberName)-&gt;value;<\/code><\/pre>\n<p>Mit denselben Klassen- und Enum-Definitionen wie oben kannst du jetzt das gleiche Ergebnis mit dem <a href=\"https:\/\/wiki.php.net\/rfc\/dynamic_class_constant_fetch\" target=\"_blank\" rel=\"noopener noreferrer\">dynamischen Abrufen von Konstanten<\/a> in PHP 8.3 erreichen:<\/p>\n<pre><code class=\"language-php\">$constantName = 'THE_CONST';\n$memberName = 'FirstMember';\n\necho MyClass::{$constantName};\necho MyEnum::{$memberName}-&gt;value;<\/code><\/pre>\n<h3>Neue <code>getBytesFromString()<\/code> Methode<\/h3>\n<p>Wolltest du schon einmal zuf\u00e4llige Zeichenketten aus einer vorher festgelegten Sammlung von Zeichen erzeugen? Das kannst du jetzt ganz einfach mit der <code><a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getbytesfromstring.php\" target=\"_blank\" rel=\"noopener noreferrer\">getBytesFromString()<\/a><\/code> Methode, die der Erweiterung Random in PHP 8.3 hinzugef\u00fcgt wurde.<\/p>\n<p>Diese neue Methode ist einfach: Du \u00fcbergibst ihr eine Zeichenkette als Ausgangsmaterial und gibst an, wie viele davon du verwenden m\u00f6chtest. Die Methode w\u00e4hlt dann nach dem Zufallsprinzip Bytes aus der Zeichenkette aus, bis sie die angegebene L\u00e4nge erreicht.<\/p>\n<p>Hier ist ein einfaches Beispiel:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$alpha = 'ABCDEFGHJKMNPQRSTVWXYZ';\n\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"MBXGWL\"\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"LESPMG\"\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"NVHWXC\"<\/code><\/pre>\n<p>Es ist m\u00f6glich, dass die angeforderte L\u00e4nge der zuf\u00e4lligen Ausgabe mehr Bytes hat als der Eingangsstring:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$nums = '123456';\n\n$rando-&gt;getBytesFromString($nums, 10); \/\/  \"2526341615\"<\/code><\/pre>\n<p>Bei einer Eingabekette mit eindeutigen Zeichen hat jedes Zeichen die gleiche Chance, f\u00fcr das Zufallsergebnis ausgew\u00e4hlt zu werden. Allerdings k\u00f6nnen Zeichen gewichtet werden, indem sie h\u00e4ufiger als andere in der Eingabe vorkommen. Ein Beispiel:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$weighted = 'AAAAA12345';\n\n$rando-&gt;getBytesFromString($weighted, 5); \/\/  \"1AA53\"\n$rando-&gt;getBytesFromString($weighted, 10); \/\/  \"42A5A1AA3A\"<\/code><\/pre>\n<h3>Neue Methoden <code>getFloat()<\/code> und <code>nextFloat()<\/code><\/h3>\n<p>Als Erweiterung der Random-Erweiterung f\u00fchrt PHP 8.3 zwei neue Methoden zur Erzeugung zuf\u00e4lliger Float-Werte ein: <code>getFloat()<\/code> und <code>nextFloat()<\/code>.<\/p>\n<p>Hier ist ein Beispiel:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\n\/\/ Generate a float value between a minimum \n\/\/  value of 0 and a maximum value of 5\n$rando-&gt;getFloat(0,5); \/\/ 2.3937446906217<\/code><\/pre>\n<p>Die Methode <code>getFloat()<\/code> akzeptiert neben dem Minimal- und Maximalwert auch einen dritten Parameter. Mit einer <strong>Random\\IntervalBoundary<\/strong> Enum kann man festlegen, ob die Min- und Max-Werte selbst von der Funktion zur\u00fcckgegeben werden k\u00f6nnen.<\/p>\n<p>Hier sind die Regeln:<\/p>\n<ul>\n<li>IntervalBoundary::ClosedOpen: min darf zur\u00fcckgegeben werden, aber nicht max<\/li>\n<li>IntervalBoundary::ClosedClosed: sowohl min als auch max d\u00fcrfen zur\u00fcckgegeben werden<\/li>\n<li>IntervalBoundary::OpenClosed: min darf nicht zur\u00fcckgegeben werden, max schon<\/li>\n<li>IntervalBoundary::OpenOpen: weder min noch max d\u00fcrfen zur\u00fcckgegeben werden<\/li>\n<\/ul>\n<p>Wenn du <code>getFloat()<\/code> verwendest, ohne die Enum als dritten Parameter anzugeben, ist der Standardwert <strong>IntervalBoundary::ClosedOpen<\/strong>.<\/p>\n<p>Ein n\u00fctzliches Beispiel aus der <a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getfloat.php\" target=\"_blank\" rel=\"noopener noreferrer\">Dokumentation der neuen Funktion<\/a> erzeugt zuf\u00e4llige L\u00e4ngen- und Breitenkoordinaten, wobei die Breitengrade -90 und 90 enthalten k\u00f6nnen, die L\u00e4ngengrade aber nicht -180 und 180 (da sie gleich sind):<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\nprintf(\n    \"Lat: %+.6f Long: %+.6f\",\n    $rando-&gt;getFloat(-90, 90, \\Random\\IntervalBoundary::ClosedClosed),\n\n    \/\/ -180 will not be used \n    $rando-&gt;getFloat(-180, 180, \\Random\\IntervalBoundary::OpenClosed),\n);<\/code><\/pre>\n<p>Die neue Methode <code>nextFloat()<\/code> ist im Wesentlichen dasselbe wie <code>getFloat()<\/code>, um einen Zufallswert abzufragen, der von 0 bis kleiner als 1 reicht:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\n$rando-&gt;nextFloat(); \/\/ 0.3767414902847<\/code><\/pre>\n<h2>Weitere kleinere \u00c4nderungen in PHP 8.3<\/h2>\n<p>PHP 8.3 enth\u00e4lt auch eine Reihe anderer neuer Funktionen und kleinerer \u00c4nderungen. Wir erw\u00e4hnen sie im Folgenden mit Links zu zus\u00e4tzlichen Ressourcen (sofern verf\u00fcgbar):<\/p>\n<ul>\n<li>Neue Methoden f\u00fcr die DOMElement-Klasse: <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.getattributenames.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::getAttributeNames()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.insertadjacentelement.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::insertAdjacentElement()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.insertadjacenttext.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::insertAdjacentText()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.toggleattribute.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::toggleAttribute()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domnode.contains.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMNode::contains()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domnode.getrootnode.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMNode::getRootNode()<\/code><\/a>,<a href=\"https:\/\/www.php.net\/manual\/en\/domnode.isequalnode.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code> DOMNode::isEqualNode()<\/code><\/a>, DOMNameSpaceNode::contains(), und <a href=\"https:\/\/www.php.net\/manual\/en\/domparentnode.replacechildren.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>MParentNode::replaceChildren()<\/code><\/a>.<\/li>\n<li>Neue Methoden f\u00fcr die Klasse IntlCalendar: <a href=\"https:\/\/www.php.net\/manual\/en\/intlcalendar.setdate.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlCalendar::setDate()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/intlcalendar.setdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlCalendar::setDateTime()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdate.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDate()<\/code><\/a>und <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDateTime()<\/code><\/a>.<\/li>\n<li>Neue LDAP-Funktionen: ldap_connect_wallet() und ldap_exop_sync().<\/li>\n<li>Neue <a href=\"https:\/\/www.php.net\/manual\/en\/function.mb-str-pad.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>mb_str_pad()<\/code><\/a> multibyte-String-Funktion.<\/li>\n<li>Neue POSIX-Funktionen: <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-sysconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_sysconf()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-pathconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_pathconf()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-fpathconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_fpathconf()<\/code><\/a>, und <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-eaccess.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_eaccess()<\/code><\/a>.<\/li>\n<li>Neue <a href=\"https:\/\/www.php.net\/manual\/en\/reflectionmethod.createfrommethodname.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionMethod::createFromMethodName()<\/code><\/a> methode.<\/li>\n<li>Neue Socket-Funktion: <a href=\"https:\/\/www.php.net\/manual\/en\/function.socket-atmark.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>socket_atmark()<\/code><\/a>.<\/li>\n<li>Neue String-Funktionen: <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-increment.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>str_increment()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-decrement.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>str_decrement()<\/code><\/a>, und<a href=\"https:\/\/www.php.net\/manual\/en\/function.stream-context-set-options.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code> stream_context_set_options()<\/code><\/a>.<\/li>\n<li>Neue Methode der Klasse ZipArchive: <a href=\"https:\/\/www.php.net\/manual\/en\/ziparchive.getarchiveflag.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ZipArchive::getArchiveFlag()<\/code><\/a>.<\/li>\n<li>Neue INI-Einstellung, um die maximal zul\u00e4ssige Stapelgr\u00f6\u00dfe festzulegen: <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.other-changes.php#migration83.other-changes.ini\" target=\"_blank\" rel=\"noopener noreferrer\"><code>zend.max_allowed_stack_size<\/code><\/a>.<\/li>\n<\/ul>\n<h2>Auslaufende Funktionen in PHP 8.3<\/h2>\n<p>Mit jeder neuen Version von PHP werden einige Funktionen und Einstellungen als veraltet gekennzeichnet, damit sie entfernt werden k\u00f6nnen. Sobald diese Funktionen veraltet sind, werden sie nicht mehr empfohlen und f\u00fchren zu Hinweisen in vielen Logs, wenn sie in ausf\u00fchrbarem Code erscheinen.<\/p>\n<p>Hier findest du eine Liste der veralteten Funktionen in PHP 8.3 mit Links zu weiteren Informationen:<\/p>\n<ul>\n<li>Die Konstante U_MULTIPLE_DECIMAL_SEPERATORS ist veraltet und wird durch U_MULTIPLE_DECIMAL_SEPARATORS ersetzt.<\/li>\n<li>Die <a href=\"https:\/\/www.php.net\/manual\/en\/random.constants.php#constant.mt-rand-php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>3MT_RAND_PHP<\/code><\/a> Mt19937 Variante ist veraltet.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/reflectionclass.getstaticproperties.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionClass::getStaticProperties()<\/code><\/a> ist nicht mehr l\u00f6schbar.<\/li>\n<li>INI-Einstellungen <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.active\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.active<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.bail\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.bail<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.callback\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.callback<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.exception\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.exception<\/code><\/a>, und <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.warning\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.warning<\/code><\/a> sind veraltet.<\/li>\n<li>Der Aufruf von <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_class()<\/code><\/a> und <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-parent-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_parent_class()<\/code><\/a> ohne Argumente sind veraltet.<\/li>\n<\/ul>\n<h2>Zusammenfassung<\/h2>\n<p>Wir haben uns die wichtigsten \u00c4nderungen in PHP 8.3 angesehen. Eine detaillierte Liste aller Neuerungen in dieser Version findest du im <a href=\"https:\/\/www.php.net\/ChangeLog-8.php#PHP_8_3\" target=\"_blank\" rel=\"noopener noreferrer\">offiziellen Changelog<\/a> der Version. Wenn du vorhast, deinen Code auf eine Plattform zu verschieben, auf der die neueste PHP-Version l\u00e4uft, kann dir der <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.php\" target=\"_blank\" rel=\"noopener noreferrer\">8.2-zu-8.3-Migrationsleitfaden<\/a> helfen, Probleme zu vermeiden.<\/p>\n<p>Wenn es deine Aufgabe ist, PHP auf deinen Entwicklungs- oder Produktionsservern zu installieren, steht 8.3 jetzt <a href=\"https:\/\/www.php.net\/downloads.php\" target=\"_blank\" rel=\"noopener noreferrer\">zum Download bereit<\/a>.<\/p>\n<p>Wenn du Kinsta-Kunde bist, kannst du dich darauf verlassen, dass wir diese Version auf den Servern hinter deinen <a href=\"https:\/\/kinsta.com\/de\/wordpress-hosting\/\">Managed WordPress Hosting-<\/a> oder <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Application Hosting-Projekten<\/a> zur Verf\u00fcgung stellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.3 wurde p\u00fcnktlich am 23. November ver\u00f6ffentlicht und enth\u00e4lt viele neue Funktionen und Verbesserungen seit der Einf\u00fchrung von PHP 8.2. Auch wenn es sich offiziell &#8230;<\/p>\n","protected":false},"author":259,"featured_media":67411,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[971],"class_list":["post-67410","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-php-updates"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?<\/title>\n<meta name=\"description\" content=\"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?\" \/>\n<meta property=\"og:description\" content=\"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-29T07:24:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-01T10:15:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Steve Bonisteel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?\",\"datePublished\":\"2023-11-29T07:24:40+00:00\",\"dateModified\":\"2023-12-01T10:15:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\"},\"wordCount\":1423,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\",\"name\":\"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png\",\"datePublished\":\"2023-11-29T07:24:40+00:00\",\"dateModified\":\"2023-12-01T10:15:25+00:00\",\"description\":\"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP-Updates\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/php-updates\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"caption\":\"Steve Bonisteel\"},\"description\":\"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?","description":"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/","og_locale":"de_DE","og_type":"article","og_title":"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?","og_description":"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.","og_url":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-11-29T07:24:40+00:00","article_modified_time":"2023-12-01T10:15:25+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83.png","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Steve Bonisteel","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?","datePublished":"2023-11-29T07:24:40+00:00","dateModified":"2023-12-01T10:15:25+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/"},"wordCount":1423,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/php-8-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/","url":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/","name":"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png","datePublished":"2023-11-29T07:24:40+00:00","dateModified":"2023-12-01T10:15:25+00:00","description":"PHP 8.3 wurde ausgeliefert und wir werfen einen genauen Blick auf einige der wichtigen neuen Funktionen und Aktualisierungen.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/php-8-3\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/whats-new-in-php-83-1.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/php-8-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"PHP-Updates","item":"https:\/\/kinsta.com\/de\/thema\/php-updates\/"},{"@type":"ListItem","position":3,"name":"PHP 8.3: Was ist neu und was hat sich in der neuesten Version ge\u00e4ndert?"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","caption":"Steve Bonisteel"},"description":"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.","url":"https:\/\/kinsta.com\/de\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/67410","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=67410"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/67410\/revisions"}],"predecessor-version":[{"id":67523,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/67410\/revisions\/67523"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/fr"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/translations\/de"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/67410\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/67411"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=67410"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=67410"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=67410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}