New features

PHP 5.3.0 offers a wide range of new features:

  • Support for namespaces has been added.
  • Support for Late Static Bindings has been added.
  • Support for jump labels (limited goto) has been added.
  • Support for native Closures (Lambda/Anonymous functions) has been added.
  • There are two new magic methods, __callStatic() and __invoke().
  • Nowdoc syntax is now supported, similar to Heredoc syntax, but with single quotes.
  • It is now possible to use Heredocs to initialize static variables and class properties/constants.
  • Heredocs may now be declared using double quotes, complementing the Nowdoc syntax.
  • Constants can now be declared outside a class using the const keyword.
  • The ternary operator now has a shorthand form: ?:.
  • The HTTP stream wrapper now considers all status codes from 200 to 399 to be successful.
  • Dynamic access to static methods is now possible:
    <?php
    class {
       public static 
    $foo 123;
    }

    $a "C";
    echo 
    $a::$foo;
    ?>

    The above example will output:

    123
    
  • Exceptions can now be nested:
    <?php
    class MyCustomException extends Exception {}

    try {
        throw new 
    MyCustomException("Exceptional"112);
    } catch (
    Exception $e) {
        
    /* Note the use of the third parameter to pass $e
         * into the RuntimeException. */
        
    throw new RuntimeException("Rethrowing"911$e);
    }
    ?>
  • A garbage collector for circular references has been added, and is enabled by default.
  • The mail() function now supports logging of sent email via the mail.log configuration directive. (Note: This only applies to email sent through this function.)