Playing with the new PHP5.4 features

PHP5.4 it’s close and it’s time to start playing with the new cool features. I’ve created a new Virtual Machine to play with the new features available within PHP5.4. I wrote a post with the most exciting features (at least for me) when I saw the feature list in the alpha version. Now the Release Candidate is with us, so it’s the time of start playing with them. I also discover really cool features that I pass over in my first review

Let’s start:

Class member access on instantiation.

Cool!
[sourcecode language=”php”]
class Human
{
function __construct($name)
{
$this->name = $name;
}

public function hello()
{
return "Hi " . $this->name;
}
}

// old style
$human = new Human("Gonzalo");
echo $human->hello();

// new cool style
echo (new Human("Gonzalo"))->hello();
[/sourcecode]

Short array syntax
Yeah!
[sourcecode language=”php”]
$a = [1, 2, 3];
print_r($a);
[/sourcecode]

Support for Class::{expr}() syntax
[sourcecode language=”php”]
foreach ([new Human("Gonzalo"), new Human("Peter")] as $human) {
echo $human->{‘hello’}();
}
[/sourcecode]

Indirect method call through array
[sourcecode language=”php”]
$f = [new Human("Gonzalo"), ‘hello’];
echo $f();
[/sourcecode]

Callable typehint
[sourcecode language=”php”]
function hi(callable $f) {
$f();
}

hi([new Human("Gonzalo"), ‘hello’]);
[/sourcecode]

Traits
[sourcecode language=”php”]
trait FlyMutant {
public function fly() {
return ‘I can fly!’;
}
}

class Mutant extends Human {
use FlyMutant;
}

$mutant = new Mutant("Storm");
echo $mutant->fly();
[/sourcecode]

Array dereferencing support
[sourcecode language=”php”]
function data() {
return [‘name’ => ‘Gonzalo’, ‘surname’ => ‘Ayuso’];
}

echo data()[‘name’];
[/sourcecode]

IDEs don’t support (yet) those features. That’s means IDEs will mark those new features as syntax errors but I hope that they will support them soon.
More info here

23 thoughts on “Playing with the new PHP5.4 features


  1. $a = [1, 2, 3];
    Finally!

    What would the return from “Callable typehint” be?
    Gonzalohello or Gonzalo ERROR ?


    1. Ohh, didnt see the
      [ ] 🙂

      What would
      function hi(callable $f) { $f(); }

      hi([new Human(), ‘hello’, ‘world’]);
      return?


      1. I’m really excited with the sort syntax of arrays 🙂

        callable typehint allows us to call “callable” things (closures, function names or even indirect method call through array)

        Anyway
        hi([new Human(), ‘hello’, ‘world’]);
        it’s wrong

        array(new Human(), ‘hello’) is a callabel element now (indirect method call through array)

        Maybe you want to do

        function hi(callable $f, $name) { $f($name); }
        hi([new Human(), ‘hello’], ‘world’);

        (I don’t have my VM with PHP5.4 so I cannot check it with a real instalation. I will check it later)


      1. echo new Human(‘foo’)->hello();
        sounds good but it has conflicts with Human (function) and Human (class).

        The only viable solution is (new Human(‘foo’))->hello();


      2. Well you have the
        echo new Human;
        echo new Human()->foo() = class
        echo Human::static = class
        echo Human() = function

        Human()->foobar
        would be a function which returns a class

        function Human() {
        return new Foo();
        }


      3. I understand It can be “ugly” but IMHO is a cool way to avoid write factory methods. Namespace separator also was ugly at the begininig but now I love it.


      1. It would be nice if was a ‘ternary like’ ruby for this situation:
        $name ||= ‘Gonzalo’
        (use $name, case blank , assign Gonzalo to it)


  2. I’m still waiting for these:

    function is_closure($v) {return is_object($v) and is_callable($v);}

    function is_iteratable($v) {return is_array($v) or is_object($v) and !is_callable($v);}


  3. $a = [1, 2, 3];
    print_r($a);

    Its throw Error
    Parse error: syntax error, unexpected ‘[‘ in D:\xampp\htdocs\joseph\worex\thephp\array\arrayDe.php on line 2

Leave a Reply to Arvind BhardwajCancel reply