Building modern web applications comes with the unspoken statute that they have to be versatile, scalable, flexible and easy to deploy amongst other things. A job of a developer is to provide the client with all these attributes without questions.
Across the globe, companies are delivering a diversity of applications with new features and functionalities that enable them to achieve their business goals faster. With the right tools, techniques and programming language along with the ideal skills and expertise, it shouldn’t be too hard to accomplish.
We are witnessing an evolution in the IT sector that has blessed us with the best accompaniments for web development. One such recent addition is the PHP 8, which offers a range of new, improved and highly functional features for us to leverage.
With the new update, PHP brings forth a lot to make the language all the more versatile and appealing. So, let’s get on with unveiling PHP 8.0.
PHP 8: New, Improved and Better
PHP 8 has set new paradigms in the language being a major update. The version has brought along changes that can be attributed in three categories;
And New Functionality.
Each category has made the language much more advanced than its previous versions. What’s more is that PHP 8 is also focusing on providing developers with opportunities to bring more expression in their code with less coding.
Let’s accentuate some of them for you to see a clearer picture that is painted by PHP 8.
For any language or even applications, the biggest and most appealing improvement can be one of speed and performance enhancement. And the new JIT or Just-In-Time Compiler does the same for PHP.
PHP is an interpreted language, meaning it runs in real-time instead of running at a predetermined time after having been compiled. JIT makes PHP run on compiled code and this improves its performance in certain scenarios.
Let’s understand this with a chronological explanation of PHP executions before and now, that is with PHP 8.
Earlier each request meant the interpreter had to parse, compile and execute PHP code each time separately. This mandated more usage of CPU resources and more time investment.
Then PHP enabled OPcache, this PHP interpreter undergoes four process to run a script, when doing so the first time.
Next came along pre-loading, a feature implemented in OPcache in PHP 7.4. It provided a means to store sets of scripts in OPcache memory before any application code actually ran. However, did that really improve performance, the jury is still out on that.
Finally, in PHP 8 the JIT compilation is introduced. In the previous versions, the scripts still needed to be compiled into machine code. The new addition bypasses that step completely. JIT compiler translates all parts of the intermediate code into machine code, hence, bringing a substantial improvement in performance and the way memory was used.
Although JIT was already available in PHP files since version 7.4, it was merely a testing tool without time compilation and performance and usability only came in action with version 8. Now, the performing of tasks like data analysis, 3D rendering and AI has definitely enhanced the developer experience.
Given that many of PHP’s counterparts have already benefited from JIT compilers, it was a much awaited addition that would open many new horizons for the language.
The NULLsafe operator is PHP 8’s solution to the hassle of accessing data.
When you access data that is deeply embedded into the structure, you would need to check for NULL values at keys that are inside a PHP array or object. This can often be misaddressed and result in many runtime fatal errors.
Before PHP 7 came along, the proposed solution was the isset function, which was helpful for several years. However, when massive amounts of data needs to be accessed, the function proved a tad bit futile.
Now, with the latest version, PHP has adopted the NULLsafe operator, making access to data much more efficient.
Let’s see how.
Consider a short-circuit evaluation, where the second operator will only get the chance to evaluate when the preceding operator has not evaluated to NULL. In such a scenario, the entire chain would be evaluated NULL by the operators, if the former marks it as so. Consequently, the chain execution would cease and the final evaluation would be NULL.
Pretty efficient, don’t you think so?
Up until PHP 8, the language had a standard control structure, referred to as the Switch Expression. It did the job it was supposed to do, that was running lines of code.
Now, PHP 8 has brought with it a refined version of Switch Expression, referred to as the Match Expression, which let me tell you, does a better job.
The purpose of Match Expressions is to resolve values. It makes it possible to set the value of a variable with the return value.
What’s more is that;
It needs no break statements;
It combines conditions;
It uses strict comparisons of types;
And it does not require additional keywords.
This new feature has made the life of developers easy as it simplifies and secures coding with safer semantics that finds the comparison as an identity check.
With v8, you won’t have to worry about creating a new interface when you need to pass a functional implementation in two or more different interfaces.
Yes, PHP 8 has introduced pure intersection types which make the language’s object-oriented system more robust. These intersection types have the ability to combine different interfaces into one, giving you the opportunity to be more elaborative with your code as creation of new types has become pretty convenient.
You’ll also be saving a lot more time and efficiency, when you look at the bigger picture.
PHP version 8 also supports class attributes.
These pieces of code simplify the parsing and usage of class annotations in metadata. They do not require a third-party library, like that of Symfony, to specify metadata for a class.
They come in extremely handy as they can be placed on class properties. This additional ability makes them ideal for specifying;
And numerous other Drupal functionalities.
In terms of modernising PHP, class attributes is a great step. With no further requirement of using docblocks as a standard way, developers are in for a treat as building better systems with the language is now easy.
Named arguments is an addition that allows the passage of data to a function quite efficiently and easily. This is because they let you pass data by simply passing the name and not the order.
The highlights of this feature include;
The ability to combine arguments;
The choice to skip over optional parameters;
The off-chance of breaking an older PHP version, as it does not come with backwards compatibility;
But overall the opportunity to create cleaner code with less amount of error handling.
Fibers is a feature found in PHP 8.1. And it is a feature that opens a lot of new possibilities in coding.
The fiber class availability in the language makes way for non-blocking code. This makes time consuming development tasks including cache rebuilds, queue runners and automated cron runs much more convenient to handle and monitor along with an improvement in their performance.
However, it is worth noting that you would have no need to interact directly with fibers as there would be libraries that will build abstractions around them. Therefore, this could be a feature that might not get extensively used in everyday development activities, specific to Drupal and the community at large.
PHP is famous for its types, for assigning numerous variables a type of the likes of boolean, integer, null and others. In that sense, union types might not surprise you, as it basically assigns types.
What is intriguing about this new entry to PHP 8 is that you can transcend the constraint of only being able to assign a single type to different variables, meaning a single variable can have two or more types, a union of types, hence the name, I’m guessing.
The multiple assigned types can be utilised for either of the assigned types. Their distinction comes from a line (|).
You should remember that a combination with void won’t work, neither would duplicate or redundant types.
The greatest benefit of this addition is that you do not need to create functional union types anymore, you can simply skip over them by assigning variables with multiple types.
Of course, there are plenty of other features and functionalities that are a part of PHP 8, all of which make the language a lot more reliable, modern and efficient. Kinsta has covered some of the most appealing features in their recent article on PHP 8.
PHP 8 and Drupal 9 Compatibility Check
We can’t talk about PHP and not mention Drupal. It is afterall a CMS built on the very same language.
So, is Drupal 9, the latest version of Drupal, compatible with PHP 8?
The answer is yes.
As the above image clearly states, Drupal 9 is compatible with PHP 7.3 and above, meaning they are supported by the platform. However, PHP 7.3 and PHP 7.4 are not recommended by the CMS, that recommendation is given to v8 and 8.1.
For Drupal 10, which is just around the corner, the story is a little different. D10 has a minimum PHP requirement of version 8.1.0. If you are on a version preceding that requirement, you won’t be able to run Drupal.
This may sound harsh, but given Drupal’s inclination towards adopting modern technologies and libraries and providing you the best of open source, it comes as no surprise that PHP 8.1 is what would suit the environment requirements of D10. Read about Drupal 10 readiness initiative to know more.
What if you are on an older version of PHP that isn’t supported?
A Drupal version would receive security coverage for as many as 12 months given it has a supported PHP version. When your PHP version becomes unsupported, you may be able to receive security updates, but they would soon cease.
Drupal 9’s end-of-life date set in November 2023. You can still expect a drop in support for PHP 7.3 before that date ever arrives. Then the ideal scenario would be to upgrade to at least 7.4, although I recommend 8, since it clearly is the better option. To know more, read about Drupal 7 end of life announcement and Drupal 8 end of life announcement.
Are You Prepared to Make the Transition to PHP 8?
If you have come so far in the article, you must know that PHP 8 allows you to experience much more than speed boosts. The massive enhancements the language has made in the latest version has developers drooling all over the world, my team included.
So, even if it is futile to say at this point, I would still say it. You have to upgrade to PHP 8 to experience all that it has to offer.
And it’s not that difficult to make the transition.
You would need to be familiar with the documentation and take into consideration the time and effort that would be involved.
You would need to assess your business priorities before plunging into the change.
You would need to deliberate on the slight learning curve and the change of pace accompanying the upgrade.
After doing all of that you would be ready to rigorously test your site with the newest version of PHP. Let me tell you that you can do the testing both locally along with in higher-level environments.
Drupal 9 has made the transition to PHP extremely easy for its sites. It won’t matter of you are using Lando or Drupal VM or configuring PHP 8 to Acquia Cloud, the process is convenient despite the medium you use.
PHP is regarded as an ancient language that is yet to catch up with the other modern languages like JS. It may be true in some sense, however, PHP 8 is a great stride towards modernising the language.
With the kind of improvements and growth PHP has achieved in the last couple version updates, it has not only impressed its counterparts, but also made the Drupal experience much more enjoyable.
So, my question now is when are you going to join the PHP 8 bandwagon?