Note: I'm migrating from gonzalo123.com to here. When I finish I'll swap the DNS to here. The "official" blog will be always gonzalo123.com

      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!

      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();
      

      Short array syntax Yeah!

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

      Support for Class::{expr}() syntax

      foreach ([new Human("Gonzalo"), new Human("Peter")] as $human) {
          echo $human->{'hello'}();
      }
      

      Indirect method call through array

      $f = [new Human("Gonzalo"), 'hello'];
      echo $f();
      

      Callable typehint \

      function hi(callable $f) {
          $f();
      }
       
      hi([new Human("Gonzalo"), 'hello']);
      

      Traits

      trait FlyMutant {
          public function fly() {
              return 'I can fly!';
          }
      }
       
      class Mutant extends Human {
          use FlyMutant;
      }
       
      $mutant = new Mutant("Storm");
      echo $mutant->fly();
      

      Array dereferencing support

      function data() {
          return ['name' => 'Gonzalo', 'surname' => 'Ayuso'];
      }
       
      echo data()['name'];
      

      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

      comments powered by Disqus