PHP 5.4 is Released — What’s New?

Contributing Editor

It’s difficult to believe almost three years have elapsed since PHP 5.3.0. The next version should have been PHP 6.0 but unicode problems have delayed development. This latest version provides many of the features planned for version 6.0.

PHP 5.4 is available to download from the php.net website. There’s a PHP 5.3 migration guide if you want to keep your old settings. While it’s stable, you’d be advised to test your sites and applications before installing it on live servers. The PHP team often release a bug-fix version a few weeks after the initial release.

So let’s look at the best new features and improvements…

Short Array Syntax

It’s now possible to use finger-saving JavaScript-like square brackets rather than using the old array(…) construct, e.g.


$array1 = [1, 2, 3];

$array2 = [
	"one" => "first",
	"two" => "second",
	"three" => "third"
];

Traits

Traits reduce some limitations of single inheritance. In essence, traits are similar to abstract classes and can contain any number of properties and methods. A class can then use any number of traits, e.g.


trait Hello
{
    function sayHello() {
        return "Hello";
    }
}
 
trait World
{
    function sayWorld() {
        return "World";
    }
}
	 
class MyWorld
{
    use Hello, World;
}

$world = new MyWorld();
echo $world->sayHello() . ' ' . $world->sayWorld();

For more information, refer to Using Traits in PHP 5.4 on PHPmaster.com.

Built-in Web Server

PHP 5.4 offers a built-in web server which runs from the Windows, Mac or Linux command line. While it’s not Apache or IIS, it’s fine for simple testing. I suspect many of the better PHP IDEs will implement support shortly.

For more information, refer to PHP 5.4′s New Built-in Web Server.

New Commands

A number of useful commands have been implemented:

  1. hextobin(string $hex): coverts a hex representation of data to binary.
  2. http_response_code(int $code): allows you to set or get the HTTP response code, e.g. http_response_code(404);
  3. header_register_callback(string $function): allows you to register a function which is called when PHP starts sending output.
  4. trait_exists(string $name [,bool $autoload]): determines whether a trait exists and, optionally, whether it should be autoloaded.

Miscellaneous Updates

If that’s not enough…

  • Class members can be accessed on instantiation, e.g. (new MyClass)->MyMethod()
  • <?=$variable?> is always available regardless of how your short_open_tag ini option is set.
  • Binary numbers can be declared, e.g. 0b11110000
  • Session upload progress has been implemented so PHP can track the state of file uploads.
  • Some users are reporting speed increases of up to 25% with a memory reduction of 35%.

Compatibility Issues

Most older PHP code should run without modification but there are a few gotchas to look out for:

You should also note that PHP 5.4.x will be the last edition to support Windows XP and Windows 2003.

PHP 5.4 isn’t quite as radical has 5.3, but there are enough new features to keep developers happy for a while. Let us know if you have any positive or negative experiences with the latest version.

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • Elizabeth

    Really nice to see traits and the example you’ve used is warmly welcomed.

  • Tim

    The example has a double echo in it:

    function sayHello() {
    echo “Hello”;
    }

    echo $world->sayHello() . ‘ ‘ . $world->sayWorld();

    Would make more sense if the functions returned the strings, instead of outputting them

    • http://www.optimalworks.net/ Craig Buckler

      Definitely! It’s been fixed, thanks.

  • samanime

    Glad to see traits and really glad to see the session upload progress available. That was a biggy that you could do with PEAR, but it then became annoying because you’d have to make sure it was installed on all of your servers and what not.

  • Alex

    Very cool release.

    I especially like traits and short array syntax. :)

  • Jason

    Why do people like Traits? Doesn’t tickle me one bit.

    • http://www.optimalworks.net/ Craig Buckler

      They allows you to share common methods across any number of classes no matter how they’re inherited. Previously, you could only do this with one abstract class so flexibility was more limited. Traits simply give you another option that should incur less coding.

      • Jason

        Mmmm, should :)

      • Stefan

        Try making a framework, and then you’d be tickled.
        First read of traits when I was developing my personal framework and Ive been looking forward to 5.4 since.

  • Nicklas

    Several mysqli aliases have been removed. What aliases are we talking about?

  • http://lach.la Lachlan Arthur

    Don’t forget array dereferencing!

    $secondElement = getArray()[1];

    • Stefan

      One of the better and most welcome additions I should add.

    • http://www.optimalworks.net/ Craig Buckler

      Thanks Lachlan – I missed that one. It’s about time you could do that.

  • Lord Vlad

    A good example of where this beats inheritance is in meta-coding. Something like a “toJSON()” method for serialization. You’re likely going to want every object that converts to JSON to do it in the same way.

    Trait ToJSON {
    function toJSON() {
    return json_encode($this);
    }
    }

    then instead of making an interface or a superclass that everything must implement or inherit from (especially annoying when working with 3rd party libs) you can just add “use ToJSON” to each class that you want this export function to work for.

    What’s nice is that if you have an edge case, the override order is Class overrides Traits overrides Inherited. So you can just add a “toJSON()” method to your special class to handle it’s edge case.

    • http://www.optimalworks.net/ Craig Buckler

      Nice example.

  • https://www.baka.ca Frank

    All of these look good. Traits can help me clean up and organize code. I’m curios about the Web server.. I’m stuck on a windows box and I am not a big fan of iis… (it has its perks)

    Most of all I hope you are right about improved performance.

  • https://www.baka.ca Frank

    Any chance it can fork a process on a windows 7 box? Can’t do this currently with 5.3

    • http://www.optimalworks.net/ Craig Buckler

      I wouldn’t have thought so although you can implement pseudo-forking by calling two or more other PHP pages and grabbing the returned content.

  • http://blogbyvimal.wordpress.com/ Vimal Raj Selvam

    Nice to see PHP 5.4 with great features. Thanks for sharing Mr. Craig.

    But do you have any idea about why windows installer is missing for PHP 5.4?

    • http://www.optimalworks.net/ Craig Buckler

      You don’t really need an installer for PHP. It’s normally just a matter of copying the files and editing php.ini to your liking. There are some path environment variables but you only need to set those once.

      • larry

        1st time PHP install……if there is not an installer for 5.4 are there instructions somewhere that will guide me through the install?

        Thanks,
        Larry

  • http://irmgardhartmann.com Irmgard Hartmann

    thanks for the info, I’ll test this built-in web server.

  • http://sandeshghimire.com.np Sandesh Ghimire

    Looks good.. cant wait to test it. Traits seems to be quite handy. Thanks for sharing.

  • Moustapha

    I installed php 5.4 on my Windows box and I’d like to use php-fpm but I can’t find the config file?

    Have you an idea how can I use it?

  • http://www.vantagegaming.net/ Ben Vail

    First time PHP installers may want to use EasyPHP. It installs Apache, PHP and MySQL and phpMyAdmin to your windows machine and a utility for managing them. Great for getting a quick test environment set up when first learning PHP/MySQL.