{"id":10348,"date":"2024-12-17T11:28:34","date_gmt":"2024-12-17T11:28:34","guid":{"rendered":"https:\/\/www.fastcomet.com\/blog\/?p=10348"},"modified":"2025-04-07T14:15:11","modified_gmt":"2025-04-07T14:15:11","slug":"php-8-4-available","status":"publish","type":"post","link":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available","title":{"rendered":"PHP 8.4 Lands at FastComet"},"content":{"rendered":"\n<p class=\"has-drop-cap\">With holidays so heavily stacked at the end of the year, one would think software development would wind down for the season. Instead, we have already seen one major release in November. <a href=\"https:\/\/www.fastcomet.com\/blog\/wordpress-6-7\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">WordPress 6.7<\/a> stormed in with impressive design additions and improvements to several key functionalities. It is fitting that the scripting language WordPress is based on would also release its newest version in the same month. As it happens <a href=\"https:\/\/www.fastcomet.com\/blog\/?s=php\" target=\"_blank\" rel=\"noreferrer noopener\">every year<\/a>, PHP 8.4 was released at the end of November, bringing some truly amazing changes.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>PHP 8.4 not only brings exciting new features but also\u2013and more importantly\u2013 aims to simplify how the language is used. Additionally, the release seeks to streamline the development process by eliminating some well-known challenges. In this blog post, we will tell you everything you need to know about PHP 8.4, so read on.<\/p>\n\n\n<div class=\"wp-block-ub-table-of-contents-block ub_table-of-contents\" id=\"ub_table-of-contents-1a0f2a6a-7f31-4d80-94c2-e3c361f21044\" data-linktodivider=\"false\" data-showtext=\"show\" data-hidetext=\"hide\" data-scrolltype=\"auto\" data-enablesmoothscroll=\"false\" data-initiallyhideonmobile=\"false\" data-initiallyshow=\"true\"><div class=\"ub_table-of-contents-header-container\" style=\"\">\n\t\t\t<div class=\"ub_table-of-contents-header\" style=\"text-align: left; \">\n\t\t\t\t<div class=\"ub_table-of-contents-title\">In This Blog Post:<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t<\/div><div class=\"ub_table-of-contents-extra-container\" style=\"\">\n\t\t\t<div class=\"ub_table-of-contents-container ub_table-of-contents-1-column \">\n\t\t\t\t<ul style=\"\"><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#0-functions-for-finding-array-items\" style=\"\">Functions for Finding Array Items<\/a><\/li><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#1-html5-parsing\" style=\"\">HTML5 Parsing<\/a><\/li><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#2-property-hooks\" style=\"\">Property Hooks<\/a><\/li><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#3-asymmetric-visibility\" style=\"\">Asymmetric Visibility<\/a><\/li><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#4-other-additions\" style=\"\">Other Additions<\/a><\/li><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#5-deprecations\" style=\"\">Deprecations<\/a><\/li><li style=\"\"><a href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#6-the-next-chapter-in-php\" style=\"\">The Next Chapter in PHP<\/a><\/li><\/ul>\n\t\t\t<\/div>\n\t\t<\/div><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"0-functions-for-finding-array-items\">Functions for Finding Array Items<\/h2>\n\n\n\n<p>Let us begin with something that one would have assumed was already possible in PHP: searching array elements for members that match specific criteria defined in a callback function. Instead, that functionality is making its debut with PHP 8.4. It comes in the form of the new <em>array_find()<\/em> function alongside three related ones. They are like <em>array_find()<\/em>, but each has a specific context.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.array-find-key.php\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong><em>array_find_key()<\/em><\/strong><\/a><strong><em> &#8211;&nbsp; <\/em><\/strong>This function&#8217;s return value is the matching element&#8217;s key instead of the value of the element itself;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.array-all.php\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong><em>array_all()<\/em><\/strong><\/a><strong><em> &#8211; <\/em><\/strong>This function will return <em>true<\/em> when every element in the queried array matches the test;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.array-any.php\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong><em>array_any()<\/em><\/strong><\/a><strong><em> &#8211; <\/em><\/strong>Finally, this function returns <em>true<\/em> when there is at least one match in the element array being tested.<\/li>\n<\/ul>\n\n\n\n<p>That said, here is a practical example of each function and what it returns as a response when tested.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$fruits = &#91;\n'apple' =&gt; 'Red Delicious',\n'banana' =&gt; 'Cavendish',\n'cherry' =&gt; 'Bing',\n'date' =&gt; 'Medjool'\n];\n\/\/ Find the first fruit name that has a space in it\nvar_dump(array_find($fruits, function (string $name) {\nreturn strpos($name, ' ') !== false;\n})); \/\/ Returns \"Red Delicious\"\n\/\/ Find the array key for the first fruit name longer than 7 characters\nvar_dump(array_find_key($fruits, function (string $name) {\nreturn strlen($name) &gt; 7;\n})); \/\/ Returns \"date\"\n\/\/ Check if any fruit name has exactly 4 characters\nvar_dump(array_any($fruits, function (string $name) {\nreturn strlen($name) === 4;\n})); \/\/ Returns false\n\/\/ Verify if all fruit names start with an uppercase letter\nvar_dump(array_all($fruits, function (string $name) {\nreturn ctype_upper($name&#91;0]);\n})); \/\/ Returns true<\/code><\/pre>\n\n\n\n<p>As you can see, these new functions will greatly simplify one of the most common operations when it comes to arrays.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1-html5-parsing\">HTML5 Parsing<\/h2>\n\n\n\n<p>HTML5 has been around for a while. It was initially released in 2008 but cemented its place as the standard for modern web pages in 2014. That is a long time for PHP&#8217;s Document Object Model parsing to be stuck on HTML 4.01.<\/p>\n\n\n\n<p>Fortunately, PHP 8.4 solves this discrepancy by introducing a new class: <a href=\"https:\/\/www.php.net\/manual\/en\/migration84.new-features.php#migration84.new-features.dom\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><em>DomHTMLDocument<\/em><\/a>. That removes the need to upgrade the existing <em>DomDocument<\/em> class, preserving its functionality with older HTML standards.&nbsp;<\/p>\n\n\n\n<p>The new class supports these constructors.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>createFromString($html)<\/em><\/li>\n\n\n\n<li><em>createFromFile($path)<\/em><\/li>\n\n\n\n<li><em>createEmpty()<\/em><\/li>\n<\/ul>\n\n\n\n<p>Since PHP 8.4 supports HTML5 fully, you can import the contents of an HTML5 page like this.<\/p>\n\n\n\n<p><em>$xmlFeed = DomHTMLDocument::createFromString($rssFeedXml)<\/em><\/p>\n\n\n\n<p>Finally, the parser from above supports the usual semantic HTML5 tags, such as <em>main<\/em>, <em>article<\/em>, and<em> section<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2-property-hooks\">Property Hooks<\/h2>\n\n\n\n<p>Next, let us talk about one of the significant changes coming with PHP 8.4: property hooks.<\/p>\n\n\n\n<p>Prior to version 8.4, properties in a private class (preventing direct access to them) had to use <a href=\"https:\/\/www.geeksforgeeks.org\/what-are-getters-and-setters-methods-in-php\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><em>getters<\/em> and <em>setters<\/em><\/a><em> <\/em>to retrieve property values or change them, respectively. However, that approach requires a lot of repetitive code, which can swell up even more as the number of properties increases. Like this, for example.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book {\nprivate string $title;\nprivate string $author;\npublic function __construct(string $title, string $author) {\n$this-&gt;title = $title;\n$this-&gt;author = $author;\n}\n\/\/ Getter for title\npublic function getTitle(): string {\nreturn $this-&gt;title;\n}\n\/\/ Setter for title\npublic function setTitle(string $title): void {\nif (strlen($title) &gt; 100) {\nthrow new InvalidArgumentException('Title is too long');\n}\n$this-&gt;title = $title;\n}\n\/\/ Getter for author\npublic function getAuthor(): string {\nreturn $this-&gt;author;\n}\n\/\/ Setter for author\npublic function setAuthor(string $author): void {\nif (empty($author)) {\nthrow new InvalidArgumentException('Author name cannot be empty');\n}\n$this-&gt;author = $author;\n}\n}\n\/\/ Usage\n$book = new Book('1984', 'George Orwell');\necho $book-&gt;getTitle(); \/\/ Outputs: 1984\n$book-&gt;setTitle('Animal Farm');\necho $book-&gt;getTitle(); \/\/ Outputs: Animal Farm<\/code><\/pre>\n\n\n\n<p>An alternative was to use PHP&#8217;s <em>__get<\/em> and <em>__set<\/em> magic methods to simplify property management. However, that approach can be harder to follow, and the logic can get messy, leading to unintended behavior. Here is an example of what that would look like.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book {\nprivate string $title;\nprivate string $author;\npublic function __set(string $key, $value): void {\nif ($key === 'title') {\nif (strlen($value) &gt; 100) {\nthrow new InvalidArgumentException('Title is too long');\n}\n$this-&gt;title = $value;\n} elseif ($key === 'author') {\nif (empty($value)) {\nthrow new InvalidArgumentException('Author name cannot be empty');\n}\n$this-&gt;author = $value;\n}\n}\npublic function __get(string $key) {\nif ($key === 'title') {\nreturn $this-&gt;title;\n} elseif ($key === 'author') {\nreturn $this-&gt;author;\n}\n}\n}\n\/\/ Usage\n$book = new Book();\n$book-&gt;title = '1984';          \/\/ Sets title\necho $book-&gt;title;             \/\/ Outputs: 1984\n$book-&gt;author = 'George Orwell'; \/\/ Sets author\necho $book-&gt;author;            \/\/ Outputs: George Orwell<\/code><\/pre>\n\n\n\n<p>However, with the introduction of <a href=\"https:\/\/www.php.net\/manual\/en\/migration84.new-features.php#migration84.new-features.core.property-hooks\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Property Hooks<\/a>, developers can handle validation and functionality directly from within the property definitions. As you can imagine, that will keep the code clean and better organized. Here is another example using the Property Hooks.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book {\npublic string $title {\nset(string $value) {\nif (strlen($value) &gt; 100) {\nthrow new InvalidArgumentException('Title is too long');\n}\n$this-&gt;title = $value;\n}\nget {\nreturn $this-&gt;title;\n}\n}\npublic string $author {\nset(string $value) {\nif (empty($value)) {\nthrow new InvalidArgumentException('Author name cannot be empty');\n}\n$this-&gt;author = $value;\n}\nget {\nreturn $this-&gt;author;\n}\n}\n}\n\/\/ Usage\n$book = new Book();\n$book-&gt;title = '1984';          \/\/ Validates and sets title\n$book-&gt;author = 'George Orwell'; \/\/ Validates and sets author\necho $book-&gt;title;             \/\/ Outputs: 1984\necho $book-&gt;author;            \/\/ Outputs: George Orwell<\/code><\/pre>\n\n\n\n<p>Even at a glance, it is obvious that this code is much more readable and tidy than the previous two examples. Because the property and its intended behavior are defined together, they are much easier to understand, therefore reducing the chance for unintended consequences. This approach is a big step towards simplifying and modernizing the object-oriented code for PHP developers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"3-asymmetric-visibility\">Asymmetric Visibility<\/h2>\n\n\n\n<p>Speaking of <em>getters<\/em> and <em>setters<\/em>, the PHP 8.4 update brings another cool change to them. Previously, they were the default way to access private or protected properties within their classes. There was no way to set the visibility of properties depending on how they were accessed.<\/p>\n\n\n\n<p>PHP 8.4 changes that for the better. The <a href=\"https:\/\/wiki.php.net\/rfc\/asymmetric-visibility-v2\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Asymmetric Visibility<\/a> feature allows properties to have different levels of visibility. For example, a property can be both public when read and private when <em>set<\/em>. Here is an example.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book\n{\npublic private(set) string $title = 'The Great Gatsby';\n}\n$book = new Book();\nprint $book-&gt;title;       \/\/ Prints \"The Great Gatsby\"\n$book-&gt;title = '1984';    \/\/ Error (visibility)<\/code><\/pre>\n\n\n\n<p>As you can see, the <em>Book<\/em> class is public except when it is being <em>set<\/em>. Then, it is private. This feature has an even more abbreviated version, in case you want to use it as well.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book\n{\n\/\/ public is assumed when the context is not setting\nprivate(set) string $title = 'To Kill a Mockingbird';\n}\n$book = new Book();\nprint $book-&gt;title;       \/\/ Prints \"To Kill a Mockingbird\"\n$book-&gt;title = '1984';    \/\/ Error (visibility)<\/code><\/pre>\n\n\n\n<p>You can already tell from the comment in the code, but Asymmetric Visibility assumes visibility is public when not <em>setting<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"4-other-additions\">Other Additions<\/h2>\n\n\n\n<p>The four improvements we discussed so far are not the only ones PHP 8.4 brings, though! There are a slew of other smaller improvements, so we have compiled a quick list to highlight the most important and exciting ones.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Calling <\/strong><strong><em>new<\/em><\/strong><strong> &#8211; <\/strong>When calling <em>new<\/em> and chaining its methods, you no longer need to place its invocations in parentheses. Here is an example of how it looks now:\n<ul class=\"wp-block-list\">\n<li><em>$Books = new Books()-&gt;getAuthor()-&gt;getTitle();<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Multibyte Support for Trim Functions &#8211; <\/strong>PHP 8.4 introduces three new functions that can remove white space or special characters from strings that may contain multibyte characters. They trim both ends or the left or right end as necessary:\n<ul class=\"wp-block-list\">\n<li><em>mb_trim()<\/em><\/li>\n\n\n\n<li><em>mb_ltrim()<\/em><\/li>\n\n\n\n<li><em>mb_rtrim()<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><em>exit() and die() &#8211; <\/em><\/strong>In previous versions of PHP, <em>exit <\/em>and <em>die <\/em>could behave like functions\u2013even though they were keywords. PHP 8.4 promotes them to fully-fledged functions, alleviating a lot of the headaches that came with their odd behavior before;<\/li>\n\n\n\n<li><strong>Lazy Objects &#8211; <\/strong>The long-awaited native support for <a href=\"https:\/\/www.php.net\/manual\/en\/migration84.new-features.php\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Lazy Object<\/a> finally arrives with PHP 8.4. It is now possible to create objects that will not be fetched until they are required;<\/li>\n\n\n\n<li><strong>JIT Changes &#8211; <\/strong>The new release delivers some JIT improvements that will make it <a href=\"https:\/\/wiki.php.net\/rfc\/jit-ir\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">run better and more efficiently<\/a> in some cases. Additionally, you can deactivate the JIT like this now instead of setting the value of <em>opcache.jit_buffer_size <\/em>to zero:\n<ul class=\"wp-block-list\">\n<li><em>opcache.jit=disable<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>That concludes the additions and changes introduced with the PHP 8.4 update. Let us move on to some deprecations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5-deprecations\">Deprecations<\/h2>\n\n\n\n<p>As is always the case when a new version of software is released, some deprecations must be mentioned.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GET\/POST Sessions &#8211; <\/strong>Using the <em>session.use_only_cookies <\/em>and <em>session.use_trans_sid<\/em> settings with PHP 8.4 will trigger a deprecation warning. With PHP 9, the settings will no longer be available because PHP is trying to move away from storing session ID data in GET\/POST parameters;<\/li>\n\n\n\n<li><strong>Method and Function Deprecations:<\/strong>\n<ul class=\"wp-block-list\">\n<li><em>DOMImplementation::getFeature($feature, $version)<\/em> (removed, not just deprecated);<\/li>\n\n\n\n<li>Deprecate <em>SplFixedArray::__wakeup()<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>xml_set_object()<\/em> and <em>xml_set_*_handler()<\/em> for string method names;<\/li>\n\n\n\n<li>Deprecate <em>dba_key_split()<\/em> when passing null or false;<\/li>\n\n\n\n<li>Deprecate <em>mysqli_ping()<\/em>, <em>mysqli::ping()<\/em>, <em>mysqli_refresh()<\/em>, <em>mysqli_kill()<\/em>;<\/li>\n\n\n\n<li>Deprecate the second parameter to <em>mysqli_store_result()<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>lcg_value()<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>uniqid()<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>md5()<\/em>,<em> sha1()<\/em>, <em>md5_file()<\/em>, and <em>sha1_file()<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>strtok()<\/em>;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Constants:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Deprecate <em>DOM_PHP_ERR<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>SUNFUNCS_RET_STRING<\/em>, <em>SUNFUNCS_RET_DOUBLE<\/em>, <em>SUNFUNCS_RET_TIMESTAMP<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>E_STRICT<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>SOAP_FUNCTIONS_ALL<\/em>;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Properties:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Soft-deprecated <em>DOMDocument <\/em>and <em>DOMEntity<\/em>;<\/li>\n\n\n\n<li>Deprecate <em>session.sid_length<\/em> and <em>session.sid_bits_per_character<\/em>;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Others:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Deprecate the <em>&#8220;S&#8221;<\/em> tag in <em>unserialize()<\/em>;<\/li>\n\n\n\n<li>Deprecate proprietary CSV escaping mechanism;<\/li>\n\n\n\n<li>Deprecate returning non-string values from a user output handler;<\/li>\n\n\n\n<li>Deprecate passing incorrect data types for options to ext\/hash functions;<\/li>\n\n\n\n<li>Deprecate a single underscore as a class name.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>With these deprecations, our overview of what is coming with the PHP 8.4 release is completed. If you are using any of the deprecated items we listed above, please ensure you take that into account when updating to the new version.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"6-the-next-chapter-in-php\">The Next Chapter in PHP<\/h2>\n\n\n\n<p>This latest iteration of PHP introduces some truly exciting changes to its functionality. The fact that it finally supports HTML5 parsing is a huge leap forward, let alone all the other cool things it brings.<\/p>\n\n\n\n<p>We are very excited about everything PHP 8.4 has in store. Not only that, the newest version of the scripting language is available and fully supported on all our servers. Check out our<a href=\"https:\/\/www.fastcomet.com\/tutorials\/cpanel\/php-version\"> tutorial<\/a> on how to change your PHP version to the newest one. Remember to ensure your application is compatible with PHP 8.4, though!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With holidays so heavily stacked at the end of the year, one would think software development would wind down for the season. Instead, we have already seen one major release in November. WordPress 6.7 stormed in with impressive design additions and improvements to several key functionalities. It is fitting that the scripting language WordPress is [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":10281,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4726],"tags":[4676,103,4940],"class_list":["post-10348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-service-updates","tag-news","tag-php","tag-php-8-4"],"featured_image_src":"https:\/\/www.fastcomet.com\/blog\/wp-content\/uploads\/2024\/11\/php_8.4.png","author_info":{"display_name":"Konstantin","author_link":"https:\/\/www.fastcomet.com\/blog\/author\/konstantin"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.4 Lands at FastComet | FastComet<\/title>\n<meta name=\"description\" content=\"It is the end of the year once more, which means another PHP update! Continue reading to find out what is new in PHP 8.4!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.4 Lands at FastComet | FastComet\" \/>\n<meta property=\"og:description\" content=\"It is the end of the year once more, which means another PHP update! Continue reading to find out what is new in PHP 8.4!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fastcomet.com\/blog\/php-8-4-available\" \/>\n<meta property=\"og:site_name\" content=\"FastComet Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-17T11:28:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-07T14:15:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.fastcomet.com\/blog\/wp-content\/uploads\/2024\/11\/php_8.4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"620\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Konstantin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Konstantin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP 8.4 Lands at FastComet | FastComet","description":"It is the end of the year once more, which means another PHP update! Continue reading to find out what is new in PHP 8.4!","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:\/\/www.fastcomet.com\/blog\/php-8-4-available","og_locale":"en_US","og_type":"article","og_title":"PHP 8.4 Lands at FastComet | FastComet","og_description":"It is the end of the year once more, which means another PHP update! Continue reading to find out what is new in PHP 8.4!","og_url":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available","og_site_name":"FastComet Blog","article_published_time":"2024-12-17T11:28:34+00:00","article_modified_time":"2025-04-07T14:15:11+00:00","og_image":[{"width":1024,"height":620,"url":"https:\/\/www.fastcomet.com\/blog\/wp-content\/uploads\/2024\/11\/php_8.4.png","type":"image\/png"}],"author":"Konstantin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Konstantin","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available","url":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available","name":"PHP 8.4 Lands at FastComet | FastComet","isPartOf":{"@id":"https:\/\/www.fastcomet.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#primaryimage"},"image":{"@id":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#primaryimage"},"thumbnailUrl":"https:\/\/www.fastcomet.com\/blog\/wp-content\/uploads\/2024\/11\/php_8.4.png","datePublished":"2024-12-17T11:28:34+00:00","dateModified":"2025-04-07T14:15:11+00:00","author":{"@id":"https:\/\/www.fastcomet.com\/blog\/#\/schema\/person\/62678ed882fa14cedd606946cf7efcbf"},"description":"It is the end of the year once more, which means another PHP update! Continue reading to find out what is new in PHP 8.4!","breadcrumb":{"@id":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fastcomet.com\/blog\/php-8-4-available"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#primaryimage","url":"https:\/\/www.fastcomet.com\/blog\/wp-content\/uploads\/2024\/11\/php_8.4.png","contentUrl":"https:\/\/www.fastcomet.com\/blog\/wp-content\/uploads\/2024\/11\/php_8.4.png","width":1024,"height":620},{"@type":"BreadcrumbList","@id":"https:\/\/www.fastcomet.com\/blog\/php-8-4-available#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fastcomet.com\/blog"},{"@type":"ListItem","position":2,"name":"PHP 8.4 Lands at FastComet"}]},{"@type":"WebSite","@id":"https:\/\/www.fastcomet.com\/blog\/#website","url":"https:\/\/www.fastcomet.com\/blog\/","name":"FastComet Blog","description":"FastComet Web Hosting Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fastcomet.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.fastcomet.com\/blog\/#\/schema\/person\/62678ed882fa14cedd606946cf7efcbf","name":"Konstantin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fastcomet.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f0de95dee43156fd75f091d8eacb609609882fcb55a652d545992c8fd7d8c8e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f0de95dee43156fd75f091d8eacb609609882fcb55a652d545992c8fd7d8c8e7?s=96&d=mm&r=g","caption":"Konstantin"},"description":"Konstantin has been a part of the FastComet team for several years, and writing is his passion. He blends technical knowledge with a desire to educate, which is the perfect combination for creating comprehensive educational and informative articles. When not writing, he enjoys broadening his linguistic horizons with books of all genres.","sameAs":["https:\/\/www.fastcomet.com"],"url":"https:\/\/www.fastcomet.com\/blog\/author\/konstantin"}]}},"_links":{"self":[{"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/posts\/10348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/comments?post=10348"}],"version-history":[{"count":4,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/posts\/10348\/revisions"}],"predecessor-version":[{"id":10653,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/posts\/10348\/revisions\/10653"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/media\/10281"}],"wp:attachment":[{"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/media?parent=10348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/categories?post=10348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fastcomet.com\/blog\/wp-json\/wp\/v2\/tags?post=10348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}