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

Transcript

70 slides
  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";
 }

More Decks by David Zuelke

Other Decks in Programming