Thiemos Archiv
- Thursday, 2019-01-10 13:19
- After I wrote similar blog posts about PHP 5.4, 5.5 and 5.6, here is (finally) my list of new PHP 7.0 features I'm looking forward to use.
TL;DR, in order of personal preference:
- Type-hint methods with return types:
function getUser(): User
- Start using
bool
,int
,float
, andstring
type hints. - Use
"\u{2603}"
in strings. - Use
$value = $array['optional'] ?? 'default';
instead ofisset()
orarray_key_exists()
. - Make anonymous classes with
new class
. - Enjoy the freedom to use
foreach
more wildly. - Still avoid
unserialize()
, but when you use it, list the allowed classes.
What changed in PHP 7.0, in more detail:
A ton of fixes have been made between PHP 5.6 and 7.0 that are – in a sense – breaking changes. More precisely: Older PHP versions allowed to write code that would behave very weird in edge-case situations, e.g. when using
$$
magic, pointer magic, or magic string unpacking. I would argue this was all broken. All you need to keep in mind is this: PHP 7 behaves much more sane.There is not much I find worth mentioning from the breaking changes section because of this:
- The
/e
modifier in regular expressions got removed. It allowed to have code in a string, similar toeval()
. Such code can now very easily be rewritten to usepreg_replace_callback()
instead. - A lot more exceptions are thrown now, instead of these weird »internal runtime errors« we had to catch with custom error handlers before.
foreach
does not mess with the internal array pointer (the one you interact with when usingreset()
,end()
, etc.) any more.foreach
also operates on a copy of the array now. The loop is now allowed to manipulate the array without messing with the loop. Before, adding elements to the array in the loop could have made it an endless loop.- All
ereg
functions are finally removed. Hurray! They have been a pain because of their abysmal runtime. - Support for the
<% … %>
tags – a weird, »ASP-compatible« alternative to the<?php … ?>
tags – got removed. - Hexadecimal strings are not considered to be numeric any more.
- Return types:
function getUser(): User
- Strict type hints for the scalar types
bool
,int
,float
, andstring
. - Unicode code points in strings:
"\u{2603}"
- The
??
null coalescing operator I blogged about before. - The
<=>
spaceship operator behaves similar to what you might already know fromstrcmp()
. Both compare two values and return -1, 0, or 1 depending on the result of the comparison. - Anonymous classes via
new class {}
. unserialize()
allows to list class names that are allowed when unserializing serialized objects.intdiv()
was added. It suprises me quite a bit to see this happening in – ugh – 2015. If there was one detail I remember from my time with QBasic in the 1990s it is the benefit of having an integer division operator, in BASIC done via\
, in contrast to the regular floating-point division via/
.dirname()
got an optional$levels
parameter. This allows to simplifydirname( dirname( … ) )
chains.- Array constants:
define( 'CHARACTERS', [ 'a', 'b' ] )
. Note the same was already possible in PHP 5.6 when using theconst
keyword in a class. use
statements allow grouping via an ugly curly bracket syntax. No, just no. Please don't use this.- preg_replace_callback_array() allows to run a bunch of replacements at once. The changelog briefly mentions something like this would have been possible via preg_replace_callback() before. Ugh, I think I don't want to know.
- Type-hint methods with return types:
Kommentare zu diesem Beitrag können per E-Mail an den Autor gesandt werden.