PHP 8 is Coming Soon! What’s new to consider for PHP Website Upgrades?
The PHP programming language would receive a major update at the end of 2020. For version 8, in addition to a JIT compiler for significantly more performance, any union types, static return types, consistent type errors for simplified type handling, and recently, named arguments have been confirmed.
A continuous list of the planned and decided innovations for the next major release of PHP. The new version is currently “under very active development”, the first alpha release is already out. So, there will probably be a few more changes before the final release at the end of the year.
JIT compiler with PHP 8
Among the innovations that have already been decided is a just-in-time compiler, which is supposed to ensure significantly more performance – even if less so in the context of web requests. Behind it is the following:
Unlike Rust, C or Java, PHP is an interpreted language. The code is not compiled but interpreted line by line during runtime, that is, translated into machine code for the CPU. The JIT compiler should compile parts of PHP code during runtime in the future. You can think of it as a cached version of the interpreted code that is created during runtime. How does it work? The JIT compiler has a function that monitors the code at runtime. Parts of it that are executed repeatedly at high frequency can then be compiled into an optimized machine code and used on the fly in place of the actual code. For a deep dive into the subject, this crash course from Mozilla recommended.
Named Arguments in PHP 8
So-called named arguments were last confirmed for the upcoming release of PHP 8. The innovation was recently announced in a separate blog post for the release . The feature is also called named parameters and its inclusion in the upcoming major release was discussed controversially in advance. Named arguments make your code more flexible and allow you to write cleaner code – a benefit that ultimately outweighs concerns about backward compatibility and inflated APIs.
Named arguments allow you to transfer input data to a function based on the parameter name in the future.
expires: time() + 60 * 60 * 2,
Before that was only possible via the parameter sequence. So-called array spreading is also supported by the new feature:
$data = new CustomerData(...$customerRequest->validated());
Union types are a collection – or union – of two or more types that indicate that all types mentioned in the union can be used, for example like this:
public function foo(Foo|Bar $input): int|float;
Static return type in PHP 8
Static is a special class name in PHP that references the class on which a method is called, even if the method is inherited. In PHP 8, in static addition to self and parent as a valid return type, PHP is dynamically typed. It can be assumed that there are static a number of use cases for both unions and return types.
In PHP 7.4, weak references, so-called weakrefs, were added. This can be used to establish references to objects that do not prevent the garbage collector from destroying these objects. Weak Maps are the continuation of this functionality.
This is useful, for example, in the case of ORM- Object-relational mapping, where, for performance reasons, caches are often implemented that reference entity classes. As long as a cache references such an object, it could not be deleted from memory by the garbage collector prior to version 7.4 – even if it was only referenced by the cache. Weak references and weak maps can be used to specify that such objects are deleted as soon as only the cache references them. In the case of ORM, where a large number of entities are often managed in one request, weak maps offer a resource-saving way of dealing with these objects.
With the Uniform Variable Syntax RFC , some inconsistencies in PHP’s variable syntax have been ironed out. For PHP 8, further adjustments are planned for cases that were overlooked.
Since PHP 5.5 the ::class Syntax allows class names to be fetched as strings. The syntactic similarity probably led to the widespread assumption that it would $object::class work. To, fetch the class name of an object, it needs however to date the following syntax: get_class($object). In V8 such code should
$foo = new Foo();
do the same thing in the future.
Other innovations in PHP 8
In version 8 you will be able to convert DateTime- and – DateTimeImmutable objects into each other. Also new: The fdivfunction that enables dividing by 0. Instead of an error message you get in V8 depending on the case INF, -INFor NANback. On request and thanks to the cooperation of the PHP community, correct type annotations for internal functions and methods are added in PHP 8. And: In version 8, type errors will also be nulloutput for internal functions instead of and a warning. In addition, a whole range of other warnings are converted into specific error messages.
Version 8 is a major release. This implies non-backward compatible changes. However, if you have continuously updated to the latest version, you should have fewer problems with it – most of them were probably already overtaken in previous versions.
Are you a PHP Website Owner? Are you looking to upgrade your existing website to the latest supported version of PHP 8? Send us an inquiry to get a free customized quote based on your business requirements.
If you are looking for a PHP web development, PHP web application development and other related web development services, please explore our PHP Web Development Services! We also provide PHP website maintenance services and PHP application security Audit. For more information, please visit our PHP Website Maintenance Services!