PHP 5.3 introduces several new features including namespaces, late static binding, dynamic class names with __callStatic, shorthand ternary operator ?:, goto support, NOWDOC syntax, and the __DIR__ constant. It also includes a new Phar archive extension, improved ICU internationalization support, more flexible INI settings, use of MySQLnd by default, and enhanced garbage collection. Performance is improved through opcode optimizations and reduced system calls.
2. 5.2 vs 5.3 vs 6
• 5.3 is a major version, should be 5½.0
• 6 taking long time, features drift back
• No sudden moves in 5.x
What's new in PHP 5.3 | 2-Apr-10 | 2
3. Syntax
• Namespaces!
• Late static binding (static::foo vs self::foo)
• $classname::method()
• __callstatic()
• Goto
• ?:
• $NOWDOC = <<„END‟
• __DIR__
What's new in PHP 5.3 | 2-Apr-10 | 3
4. Functions
• Phar – PHP Archive
• Pect/intl – ICU support
• MySQLnd
• INI magic – per dir, per user, .htaccess-style
• OpenSSL for OpenID
• SPL class library
• Date/time improvements
• Getopt() support
• E_DEPRECATED
What's new in PHP 5.3 | 2-Apr-10 | 4
5. Engine
• Garbage collection!
• Stack usage improvements
• Opcode optimizations
• System call reduction
What's new in PHP 5.3 | 2-Apr-10 | 5
6. Namespaces
define(“MY_HTTP_GET”, 1); namespace My::Http;
define(“MY_HTTP_POST”, 2);
const GET = 1;
const PUT = 2;
class My_Http_Request {
function __construct( class Request {
$method = function __construct(
ZEND_HTTP_GET) $method = GET)
{
{ }
} }
}
function send_request(
Request $request) {
function my_http_send_request( }
My_Http_Request $request) {
}
What's new in PHP 5.3 | 2-Apr-10 | 6
7. Namespaces
• Organize OO code into self-contained units
• Reduce conflicts
• Shorten names
class
Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensiti
ve extends Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum
• Compile-time definition
• Mostly compile-time resolution
• Many NS per file, many files per NS
• Real names have ::
What's new in PHP 5.3 | 2-Apr-10 | 7
8. Namespaces – new syntax
• namespace foo::bar;
• use foo::bar as baz, boo::hoo::foo;
• __NAMESPACE__
• namespace::foo
• ::foo() - means global one
What's new in PHP 5.3 | 2-Apr-10 | 8
9. Late Static Binding
Gateway to ActiveRecord
class Singleton {
const ID = 0;
static $instance = array();
static function getInstance() {
$id = static::ID;
if (empty(self::$instance[$id])) {
self::$instance[$id] = new static;
}
return self::$instance[$id];
}
}
class Foo extends Singleton {
const ID = 1;
}
$x = Foo::getInstance();
What's new in PHP 5.3 | 2-Apr-10 | 9
10. Dynamic class name
Everything can be variable, class name too
class DbDriver {
const NAME = “MySQLDriver”;
static function execute($sql) {
}
}
$db = “DbDriver”;
echo $db::NAME;
$db::execute(“SELCT * FROM foo;”);
What's new in PHP 5.3 | 2-Apr-10 | 10
11. __callStatic
__call‟s static cousin
class DummyDriver {
const NAME = „Dummy‟;
static function __callstatic($name, $args) {
echo static::NAME.“::$name is not implemented”;
}
}
class MySqlDriver extends DummyDriver {
const NAME = „MySQL‟;
}
$db = „MySqlDriver‟;
$db::execute(„SELCT * FROM foo;‟);
What's new in PHP 5.3 | 2-Apr-10 | 11
12. ?:
Shortcut for $a?$a:$b
$name = $_GET[„name‟] ?: „anonymous‟;
What's new in PHP 5.3 | 2-Apr-10 | 12
13. goto
Guess what it does ;)
RETRY:
try {
…
} catch (Exception $e) {
recovery($e);
goto RETRY;
}
• Don‟t try it at home – unless you know what you do
• Can‟t jump into blocks
What's new in PHP 5.3 | 2-Apr-10 | 13
14. NOWDOC
Repeat after me, exactly as I say it:
$a = 3; $b = 5;
echo <<<EOF
$a+$b
EOF; // prints 3+5
echo <<<„EOF‟
$a+$b
EOF; // prints $a+$b
echo <<<“EOF”
$a+$b
EOF; // printd 3+5
Note HEREDOC has two syntaxes now
What's new in PHP 5.3 | 2-Apr-10 | 14
15. __DIR__
__FILE__‟s brother – constant dirname(__FILE__)
class Foo {
const BAR = dirname(__FILE__); // can‟t!
const BAR = __DIR__;
public $bar = dirname(__FILE__); // can‟t!
public $bar = __DIR__;
}
What's new in PHP 5.3 | 2-Apr-10 | 15
16. Phar
• Packs multiple PHP files into one .phar
• Supports streams & includes into phar
• Supports running CLI and Web apps from phar
include „phar://mylib.phar/My/Http.php‟;
$img = „phar://mylib.phar/My/img/logo.jpg‟;
header(„Content-type: image/jpeg‟);
echo file_get_contents($img);
What's new in PHP 5.3 | 2-Apr-10 | 16
17. ICU extension
• Supports internationalization functions from IBM
ICU
• Collation (plain English: sorting)
• Number/Date/Message formatting
• Locale representation
• Normalization
• Graphemes
What's new in PHP 5.3 | 2-Apr-10 | 17
18. INI improvements
• Localized sections:
[PATH=/var/www/html/mysite]
[HOST=www.myblog.com]
• .htaccess-style user files
user_ini.filename = “.user.ini”
user_ini.cache_ttl = 300
What's new in PHP 5.3 | 2-Apr-10 | 18
19. MySQLnd
• PHP-specific MySQL client library
• Uses Zend MM
• Reduces copying of data
• Uses PHP streams
• --with-mysql=mysqlnd
What's new in PHP 5.3 | 2-Apr-10 | 19