Friday, 14 September 2018

Upgrade process from PHP 5.x to 7.x

Upgrade process from PHP 5.x to 7.x


Many PHP developers are still using PHP 5.x version and have not migrated to the latest PHP 7. The reason behind why developers are still using the previous version relates to the fact that many developers tend to fear about its compatibility with their apps. The first thought that strikes their mind is that whether PHP 7 can support their apps or not. At times, they do also fear about the large migration time their apps would require to migrate on the new PHP version.

Why You Should Update Your Apps From PHP 5 to PHP 7?


PHP is a popular server-side scripting language used by many developers to create awesome functional websites. It is vastly used by the programmers because of its easy to understand structure and strong Object Oriented Programming (OOP) support. As according to a survey, around 82% of the world’s overall web apps uses PHP as their back-end programming language. It is necessary for the servers to power web apps with quick loading speeds. As there are number of users who rely on slow 3G speed, and thus require fast web applications.

According to a survey if a web page takes more than 3 seconds to load, 40% of the users abandon that web page quickly. In contrast to PHP 5.6, PHP 7 offers a vast improvement in performance speed of the apps. It makes applications run more smoothly. Because it has new advanced features which lets web apps optimize with higher speed. PHP 7 also reduces the consumption demands of servers. As its functions are really lightweight and requires less powered servers to run web apps.

In this tutorial, I will demonstrate how to migrate your application from PHP 5 version to PHP 7, starting from upgrading the development environment.

For the purpose of this tutorial, I assume that you have a PHP application installed on a web server. The prerequisites include:

  • PHP 5.x & 7.x

I have used Cloudways managed PHP web Hosting. The Cloudways platform offers a great devstack and allows me to work freely without distracting my attention to any server level issue. You can also try out Cloudways for free, by signing up for an account.

PHP Version Settings


The reason why I have selected Cloudways is that it gives simple 1-click functionality to update PHP versions. If you want to update your PHP5 setup, just navigate to the Settings and Packages tab and select the desired version to update.




PHP 5 Features


PHP 5 is in the development circuit for more than 10 years now. In fact, many applications are still using versions, including PHP 5.2, 5.3 or 5.6. It is because of the reason that PHP5 offers tremendous features such as:

  • Flawless Object oriented programming support.
  • Standard PHP Library (SPL)
  • Closures.
  • Namespaces.
  • Magical methods for metaprogramming.
  • MySQLi - advanced MySQL extension.
  • Cleaner Error handling.
  • Supports XML extensions better.




Things You Should Need to Know About PHP 7


PHP 7 was released on December 3, 2015 with advanced features and improved functionalities. It is comparatively faster than the previous PHP 5 versions, and provides optimized performance for the apps. Some new features of the latest PHP 7 are:

PHP Zend Engine


PHP 4 was released in 1999 and since from then, the platform was powered by Zend engine.

Zend is an open source execution engine which supports PHP 7 and is totally developed in C language. It helps interpreting PHP language and gives ease to the developers to perform developmental jobs. PHP 5.X used Zend Engine II, whereas the new PHP 7 version uses Zend Engine with a code name PHPNG (Next Generations).

Power of Error Handling


PHP developers always finds difficult to handle catchable fatal errors, as it is one challenging job for them. But using Exceptions is the only way developers can resolve these fatal errors. The new Zend engines gives ease to the developers handle fatal errors at the run time, which sometimes becomes unprofessional and risky.

The Exception Base Class is not extended by the Engine Exceptions objects in the new Zend engine. The object shows that the engine despite of using older version's interfaces and data, produces different kinds of exceptions in error handling, which are traditionals and the Engine exceptions.

With PHP 7, web programmers are allowed to catch both of these exceptions by using a new Parent Class called BaseException.

Below is the code and result of Fatal errors emerged due to previous versions shown:

Before



function call_method($object){

 $object->method();

}
call_method(null);



After



try{
call_method(null);
} 
catch (EngineException $e){
 
echo "expection":{$e->getMessage()}\n";
}



Added Support To 64-Bit Windows System


Being a prominent member of LAMP stack, PHP uses native environment of Linux. But running on Windows system is not impossible for PHP as well. Windows has two types of bit systems, one is Windows X86 and the other is X64. PHP 5.x didn't had support of Windows X64. But the new PHP 7.x version efficiently supports Windows X64 bit system, and thus eases developers to work in Windows environment.

Now you can run and compile the language on your Windows X64 Bit systems. PHP 7 now supports all the integers and large files of X64 bit system.

Scalar Type Declaration


Using PHP 5, you can pass parameters in a function with classes, interfaces and array types only. For example, if you want to pass a parameter of a certain string type in a function, then you will have to check within a function like the one shown below:


// php 5
function getrollNo($number) {
    if (! is_integer($number)) {
        throw new Exception("Please ensure the value is a number");
    }

    return $number;
}

getrollNo('students');



With PHP 7, there is no need to perform any extra check. You can simply type your function parameters with desired string, int or any other variable type.


// PHP 7
function getrollNo(int $number) {
    return $number;
}

getrollNo('students');

// Error raised
PHP Fatal error:  Uncaught TypeError: Argument 1 passed to getrollNo() must be of the type integer, string given, called in ....



PHP 7 will throw a Fatal error exception as seen above once you type hint with scalar values.

Array Constants


In PHP 5, only constants defined with the define() method can accept scalar values. On the other hand, in PHP 7, you also get the ease to have constant arrays using the define() method.


// PHP 7
define('Students', [
    'rollnoid' => '11',
    'studentname' => 'Pardeep',
    'studentbatch' => '8B'
]);
echo Students['rollnoid'];
// Result
11



Imports from the Same Namespace


In PHP 7, Group use declaration helps make code shorter and easy to understand. Earlier in PHP 5, if you want to use multiple classes, functions and constants from the same namespace, you have to write the code as follows:


// PHP 5
namespace Unicodeveloper\Emoji;

use Unicodeveloper\Emoji\Exceptions\UnknownMethod;
use Unicodeveloper\Emoji\Exceptions\UnknownEmoji;
use Unicodeveloper\Emoji\Exceptions\UnknownUnicode;

class Unicode{

}



In PHP 7, you can easily group them as shown below:


// PHP 7
namespace Unicodeveloper\Emoji;

use Unicodeveloper\Emoji\Exceptions\{
    UnknownMethod, UnknownEmoji, UnknownUnicode, IsNull, function checkForInvalidEmoji, const INVALID_EMOJI };

class Emoji {

}



Return Type Declaration


In PHP 7, you can use functions to return data types. This feature is available in almost all strong programming languages, but just wasn't available in PHP 5. Now with PHP 7, you can write functions to return certain types of data.


function divideValues(int $firstNumber, int $secondNumber): int {
    $value = $firstNumber / $secondNumber;
    return $value;
}

echo divideValues(8, 9);

// Result
0



In the above mentioned function, we want integer as the return value. Therefore, the default coercive type checking in PHP comes into play here. The value returned from the function should be float and should throw a fatal error, but it is automatically returned into an integer.

Enable strict mode by placing declare(strict_types=1); at the top of the file and run it again. It should throw a PHP Fatal Type error like the one shown below:


PHP Fatal error:  Uncaught TypeError: Return value of divideValues() must be of the type integer, float returned in .....


Strong Type Check


PHP 7 allows coercion for specific operations, such as dealing with numeric strings and other data types.


function getBookNo(int $number) {
    return "This is it: " . $number;
}

echo getBookNo("8");

// Result
This is it: 8



In the above mentioned function, I have passed a string in the parameter and later coerced into an integer. But in PHP 7, you can be strict with your parameters. You can ensure that no automatic conversions could occur by defining a strict mode at the top of your file:


declare(strict_types=1);

function getBookNo(int $number) {
    return "This is it: " . $number;
}

echo getBookNo("8");

// Result

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to getBookNo() must be of the type integer, string given, called in ......



Whenever you pass a float value in PHP 5, it strips out the decimal part and returns you an integer result. On the contrary to this, in PHP 7, you will get a fatal error exception if you try to pass in a float value. This feature becomes impressively important when building financial applications.

Spaceship Operator


A new operator called spaceship operator or combined comparison operator (<=>) is introduced in the new PHP 7 version. Its basic purpose is to sort out and combine comparisons.

Before PHP7:



function order_func($a, $b)
{
return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
}



After PHP7:



function order_func($a, $b)
{
return $a <=> $b;
}



This is one of the beautiful addition in this latest PHP version which can be used to quickly and conveniently compare two expressions. The operators can be used as follows:

a < = > b

f a is less than b, the expression output would be -1
If a is equal to b, the expression output would be 0
If a is greater than b, the expression output would be 1

Accessing Static Values


In PHP 5.x, if you try to access a static value, you get an error like the one shown below:


class student {
    static $name = 'cw';
}

echo ' student'::$name;

// Result
Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting ',' or ';' in .....



But in PHP 7.x, it throws no error and works flawlessly.


// PHP 7

class student {
    static $name = 'cw';
}

echo 'foo'::$name;

// Result cw



Add Anonymous Classes


PHP 7 enables the developers to use OOP concept and to use anonymous classes. The concept already exists and used in many Object-oriented languages like C# and Java. The anonymous class – as defined by the name- are the classes with no names. But the object that instantiates has same functionality as an object of a named class.

If we talk about the syntax which is same as what we were using in traditional PHP classes the only difference is the name, which is missing. The advantage of using anonymous class is that it can increase the speed of code and execution time as well, if and only if these classes used in an excellent way. And in the case when a class doesn’t need to be documented.


var_dump(new class(){
 public function __Construct($i){
 $this->i =$i;
       }
}



Migrating Your Apps From PHP 5 to PHP 7


PHP 7 includes significant updates which makes its performance really faster than the previous versions. But migrating your application from older version to new PHP 7 might include several challenges. Yet its reward is quite fruitful, as PHP 7 results in much faster performance and less demand on servers.

While migrating your apps to new PHP 7 version, always make sure that the libraries your project uses are available in PHP 7.

Because you may need to hold off the migration process for a while, if your project libraries aren’t supported in PHP 7. While you can check for alternative solutions including removing the dependency on those particular libraries.

If your app uses PHP 5.5 or 5.6, then you can easily migrate it to new PHP 7. However, if the code of your app is written in PHP 4, then it could might require few syntax moderations. As the one like of constructor functions in PHP 4, which are no longer supported in PHP 7.

Make sure that your code includes unit and integration testing as well, while migrating your app to PHP 7. As identifying these issues first through tests makes sure that they get resolved before popping up as bugs on live screen.

Wrapping Up!


In this blog, I have briefly covered all the new upgrades and enhancements of PHP 7, and how some old features of PHP 5 could be easily upgraded to PHP 7. No doubt, PHP 7 is a right choice to adapt in the wake of advancing development norms. As it has came out with such impressive enhancements which perfectly make it an adequate programming language to develop large scale applications.

Still if you have any further questions regarding this article or new advancements in PHP 7, you can simply write your queries in the comments section below.

0 comments:

Post a comment