Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HHVM & PHP 7: The Next Generation PHP Engines

HHVM & PHP 7: The Next Generation PHP Engines

Presentation given at International PHP Conference 2014 in Munich, Germany.

David Zuelke

October 29, 2014
Tweet

More Decks by David Zuelke

Other Decks in Programming

Transcript

  1. <?php
 echo  $a  +  $b; T_OPEN_TAG   T_WHITESPACE("\n")   T_ECHO

      T_WHITESPACE("  ")   T_VARIABLE("$a")   T_WHITESPACE("  ")   '+'   T_WHITESPACE("  ")   T_VARIABLE("$b")   ';'
  2. Version name Intended release date LTS? End of support 3.3

    11 Sep 2014 yes 13 Aug 2015 3.4* 6 Nov 2014 no 3.5* 1 Jan 2015 no 3.6* 26 Feb 2015 yes 28 Jan 2016 3.7* 23 Apr 2015 no 3.8* 18 Jun 2015 no 3.9* 13 Aug 2015 yes 14 Jul 2016 3.10* 8 Oct 2015 no 3.11* 3 Dec 2015 no 3.12* 28 Jan 2016 yes 29 Dec 2016 3.13* 24 Mar 2016 no 3.14* 19 May 2016 no 3.15* 14 Jul 2016 yes 15 Jun 2017
  3. class  MyClass  {
        const  int  MyConst  =

     0;
        private  string  $x  =  '';
        public  function  increment(int  $x):  int  {
            $y  =  $x  +  1;
            return  $y;
    }
 }
  4. class  Mailbox<T>  {
        private  ?T  $data;
 


           public  function  __construct()  {
                $this-­‐>data  =  null;
        }
 
        public  function  put(T  $mail):  void  {
                $this-­‐>data  =  $mail;
        }
 
        public  function  check():  ?T  {
                if  ($this-­‐>data  !==  null)  {
                        return  $this-­‐>data;
                }
                return  null;
        }
 }
  5. $z  =  11;
 $foo  =  $x  ==>  $y  ==>  $x

     *  $z  +  $y;
 $bar  =  $foo(5);
 var_dump($bar(4));  //  outputs  59
  6. echo  "Does  1+2  equal  3?";
 if  ((1+2)  ==  3)  {


       echo  "Yes  it  does!";
 }  else  {
    echo  "No  it  doesn't...";
 } EchoStatement      ConstantExpression("Does  1+2  equal  3?")   IfBranchStatement      BinaryOpExpression(EQUAL)          BinaryOpExpression(ADD)              ConstantExpression(1)              ConstantExpression(2)          ConstantExpression(3)      EchoStatement          ConstantExpression("Yes  it  does!")      EchoStatement          ConstantExpression("No  it  doesn't...")
  7. EchoStatement      ConstantExpression("Does  1+2  equal  3?")   IfBranchStatement  

       BinaryOpExpression(EQUAL)          ConstantExpression(3)          ConstantExpression(3)      EchoStatement          ConstantExpression("Yes  it  does!")      EchoStatement          ConstantExpression("No  it  doesn't...") EchoStatement      ConstantExpression("Does  1+2  equal  3?")   IfBranchStatement      ConstantExpression(true)      EchoStatement          ConstantExpression("Yes  it  does!")      EchoStatement          ConstantExpression("No  it  doesn't...") EchoStatement      ConstantExpression("Does  1+2  equal  3?")   EchoStatement      ConstantExpression("Yes  it  does!")
  8. $$foo['bar']  ==  ${$foo['bar']};   $$foo-­‐>bar  ==  ${$foo}-­‐>bar;   $$foo::$bar  ==

     ${$foo}::$bar;   global  $$foo-­‐>bar  ==  global  ${$foo-­‐>bar};
  9. $foo()['bar']();
 [$obj1,  $obj2][0]-­‐>prop;
 getStr(){0};
 $foo['bar']::$baz;
 $foo::$bar::$baz;
 $foo-­‐>bar()::baz();
  
 foo()();
 $foo-­‐>bar()();


    Foo::bar()();
 $foo()();
  
 (function()  {  ...  })();
 ($obj-­‐>closure)();
  
 [$obj,  'method']();
  10.                    

                             //  old  meaning                      //  new  meaning
 $$foo['bar']['baz'];      ${$foo['bar']['baz']};      ($$foo)['bar']['baz'];
 $foo-­‐>$bar['baz'];          $foo-­‐>{$bar['baz']};          ($foo-­‐>$bar)['baz'];
 $foo-­‐>$bar['baz']();      $foo-­‐>{$bar['baz']}();      ($foo-­‐>$bar)['baz']();
 Foo::$bar['baz']();        Foo::{$bar['baz']}();        (Foo::$bar)['baz']();
  11. function  call_method($obj)  {
        $obj-­‐>method();
 }
 
 try

     {
        call_method(null);
 }  catch  (EngineException  $e)  {
        echo  "Oops,  that  almost  was  a  fatal:  {$e-­‐>getMessage()}\n";
 }