On 03 December 2015, PHP 7 was released with php, php tutorial, php full form, what is php, php 7, php 7 tutorial, php 7 features or many more. Over the course of this mini-series, we’re going to take a look at some of the major changes that PHP 7 introduces.
But fist off,
what happened to PHP 6 with tutorial?
The developers of PHP didn’t decide to copy Microsoft and skip a version number, instead, PHP 6 was a thing.
PHP 6 intended to add Unicode support to PHP, so the idea was that you could write your code using Emoji if you wanted to.
Ultimately though, there was a lack of community interest, and complex challenges ultimately killed the project off, but because PHP 6 was an actual thing, the maintainers of PHP decided to not reuse that number.
So during the time that PHP 6 was being developed,Facebook introduced the Hip Hop Virtual Machine – or HHVM. This delivered significant performance increases over normal vanilla PHP, and so because PHP didn’t want to lose ground to HHVM, the main focus of PHP 7 became performance increases, and in some cases, around 100%increase in the number of requests per second that the server could handle just by upgrading from PHP 5 to PHP 7 were not too uncommon.
So now that we’ve covered some of the background,we can go ahead an consider php 7 tutorial. So for this mini-series, I’ll be using Bitnami as my WAMP server, simply because at the time of creation, Bitnami is the only WAMP server which is already updated to PHP 7, and as we can see here, the version number of PHP has been updated to reflect PHP 7.
What is depreciated? – What’s new in PHP 7 with php 7 tutorial?
Because this is a major version change, some depreciated functions have now been removed, and some other functions have now been depreciated. I’m only going to mention some of the more significant depreciation’s, because most people will be aware that some functions were depreciated in PHP 5.
The first, and probably the biggest depreciation is the PHP 4 style constructors. So in the past, when you’re creating a class, you would normally create your class, and then if you wanted to pass some parameters to it straightaway, you would create a method with the exact same name as the class itself, so in this example, we’ve got Foo as the class, and a method to overload it, and this method also allows us to pass in the parameters.
With php 7 tutorial however, this has become depreciated,and instead of doing it this way, we should now use the __construct method. This now performs the exact same functionality,but it does it in a more visible way. So as we can see, this still displays 1 as our output, and that’s because the __construct method has the exact same functionality as the PHP 4 approach.
And you may be wondering why bother changing this if the original functionality is exactly the same. There are two main reasons. The first being edge cases, where it was possible to call the PHP 4 style constructors unintentionally, while it’s extremely clear that the __construct methods will always be called when an object is constructed in this case. The second reason is clarity.
For people learning PHP, it wasn’t always obvious what the PHP 4 approach would do. We have a method that we’re not actually ever calling, and so how do we, as a new programmer, understand that concept? While again, it’s very clear when this new method will be called, because the name’s in the title. The other major depreciation is MySQL functions. I’m not going to demonstrate these, because these have been depreciated for so long, and so much press has been circulated around them,that most people will now have already ceased using them, but if you want to interact with databases, and you were using the MySQL functions, you should now use the PDO, or mysqli instead. The major reason for this is both of these approaches support prepared statements, which provide significant protection against sql injection attacks, which was simply not possible with the old MySQL approaches.
Type declarations! – What’s new in PHP7?
Up until PHP 7, whenever we’ve wanted to work with numbers and perform validation, we’ve always had to perform some checking in the form of is_int, or is_float, is_bool, or is_string. For example, if you’re creating a form, you want to check that a quantity is actually a number, and not a string. If we take a look at this function at the moment, we can see that at the moment, we’re indicating that this is an integer.
If we change it to a float, we can see that this is now updated to reflect the fact that it’s a float. And we can of course, change it to a boolean,which will reflect properly, as well as a string, and again, that reflects properly. With PHP 7 however, we can be more strict,and we can use the type in the actual parameter statement. In this case, we’re going to specify that input is always going to be an integer, and we’re going to try to run it with this string;we’ll see that this actually crashes our web page, because this string cannot be parsed as an actual number. This is not always the case, for example if we change this back to a boolean, and refresh our page again, we will see that it is an integer.
This is because a boolean can also be considered 1 or a 0. We can also try to pass through a float, and we can see that this actually works as well. And this is the default PHP 7 behavior; to allow these incorrect types to pass through the filter unchecked. We can however force these modes to be enforced by PHP properly. To do this we can simply type; declare, and the in parenthesis, strict_types = 1.
Now, remember that we have a float here, and we’re trying to pass this into an integer. If we go back to our web page and refresh again,we can see that this now properly crashes our page. If we tried to pass in a boolean, this is also going to keep the page crashed. This is because we’re no longer allowing these values to be parsed as integers; they must be integers natively. And refresh the page, we’ll see that this is working again properly now. So when it comes to what types of data types you can enforce, in addition to the ones in PHP 5, such as class, object, array, we have these new four ones… float, integer, boolean, and string.
We’ve been invaded! – What’s new in PHP7?
In previous versions of PHP, a common task was to compare two values to determine which one was the greatest, and then perform different code depending on that result. As you can see here, this can take multiple lines if you want to be absolute about it. So here for example, I’m comparing each individual instance of $a and $b. $a is less than $b, $a is equal to $b, and$a is greater than $b.
In this case, $a is 1, and $b is 10, and so we would expect our result here to be -1. If we refresh our page, we can see that this is the case. If we change this to $a is equal to 10, and refresh our page again, we can see that it’s equal to 0, and if we change $a to 100, we can see that $a is going to be greater than 10, and therefore the output is 1. The problem with this however, is that this is quite a lot of code just to perform a very simple task, and so PHP 7 with PHP 7 tutorial borrows a function from the Ruby language, which is called the spaceship operator.
So in this case, we’re going to type $a is,spaceship operator, and then $b. And we will see that this outputs the exact same result as all of this code. So if we refresh our page, we’re going to see that this is equal to 1. If we take $a back down to 10, it’s going to be equal to 0, and if we take $a down to 1 again, we can see that the output is -1. As we can see, this operator is very simple to perform, and actually quite powerful when it comes to determining which value is greater than the other. And just like any other operator, you can use this in any sort of conditional statement that you want. So you could use this as part of an in-line ternary, or a switch statement, or anything else.
Unicode and Emoji! – What’s new in PHP 7?
An interesting feature of PHP 7 is the fact that we can now work with Unicode natively. So in the past, if we wanted to work with Unicode, we’ve had to resort to offloading that work to JSON or some other format, now however, we can simply output Unicode directly from PHP 7 & PHP 7 tutorial itself. To do this, we simply need to type the escape sequence, which is \u and then in curly braces, the code that we want to output.
So if we wanted to output a random Unicode character, we could just include that in curly braces, and if we refresh our page, we can see that that’s output properly for us. If the character you’re working with has any leading zeros, you can of course just add them in as well. PHP will actually remove all of the leading zeros for you.
Return types! – What’s new in PHP7 & php 7 tutorial?
we started off with this function, which checks the type of the input and return it on the screen. And as we can see here, we can see that this is an input of an integer. In addition to checking the inputs of a function,we’re also now able to check the outputs. So if we create a new function called test,and we’re going to want to return an integer all of the time, we could pass this into here.
So this is going to return 1, which is obviously an integer, and so this should show up as an integer, and as we can see php 7 tutorial, it is. To enforce this being an integer however,we can now add a colon after the parameters, and then the type that we want to return. So we’re going to specify that this is going to be an integer all of the time, and again, if we refresh the page, we’re going to see that this is an integer.
So if we changed this and tried to return some sort of text, and refresh our page, we’re going to see that we break the actual web page itself, because this wasn’t and integer, and therefore, we’re returning the wrong type. If we changed this to string however, and refresh the page, we’re going to see that this is now showing properly as being a string. So like with type hinting, we can actually specify the output type of the functions, which is similar to providing the input type of the parameters, which enables us to create tightly controlled functions and modules,something that the enterprise world will probably be keen to take advantage of.
More question marks! – Null coalesce – What’s new in PHP 7 and php 7 tutorial?
A very common task within PHP, especiallywhen validating form input, is to check whether a form field has been set. This is normally done by using the isset command,by passing in the actual value that you want to check whether a value has been set for. In this case, we’re looking for a name, andif a name has been set, we’re going to output that name after the word Hi. So if we look at our page now, and just refresh,we’re going to see that we get ‘Hi there’. This is because the name hasn’t been set,and therefore this in-line ternary is returning false, and therefore, we’re getting ‘there’.
If we added a name here, and refreshed our page again, we’re going to obviously get that output name. In terms of the code however, this is quite wasteful. We’re using the $name variable multiple times on the same line, both because we need to check whether the name has been set or not,and then to actually output it. An alternative to this has been created within PHP 7, which is the null coalescence operator. So instead of using the is set command, we can simply type echo ‘Hi ‘ . $name ?? ‘there’; The value that we want to check whether a value has been set for, then two question marks, and then the value that we want to use if a value hasn’t been set.
So if we refresh our page now, we’re going to get ‘Hi Stretch’ on both occasions, because we have ‘Stretch’ specified in our $name. If we delete this assignment, and just leave$name unassigned, and refresh our page again, we’re going to need to separate this out into two separate lines for the null coalescence operator to work however. And so if we try this again, we can see that we get ‘Hi there’ on both occasions. And this just replicates the exact same functionality as we have up here, except this time, we’re only using the variable name once, and then providing the output if the name hasn’t been provided. So you may be wondering why bother with this new operator, and the answer is simply that it saves time. There is no greater meaning behind the operator,and it doesn’t introduce new functionality, as much as it enhances existing functionality,by streamlining the process.
We’ll be discussing a lot of the addition sand the depreciated code in the next few Articles, so make sure you stay tuned. What do you think of this video? Has it been helpful, have you learnt something new? Let me know in the comments! Hit that share button, and check out some of these other Articles.
Here are some more FAQ related to this Article: