What's New In PHP 5.3: Volume Two
-
Upload
david-zuelke -
Category
Technology
-
view
3.846 -
download
1
description
Transcript of What's New In PHP 5.3: Volume Two
![Page 1: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/1.jpg)
What's New in PHP 5.3: Vol.2David Zülke, Johannes Schlüter
![Page 2: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/2.jpg)
Johannes Schlüter 2
PHAR
![Page 3: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/3.jpg)
3
PHAR – PHP Archive
❙Similar to Java's JAR❙Possibly the future default way for distributing
applications❙PHAR files can use a custom file format or be based on
tar or zip archives❙PHAR includes a flexible front controller system to do
the mapping from request to a file inside the phar
![Page 4: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/4.jpg)
4
Creating phar archivestry { $phar = new Phar('myapp.phar'); $phar['index.php'] = '<?php echo "Welcome to the index!"; ?>';
$phar['page2.php'] = '<?php echo "This is page 2."; ?>';
} catch (Exception $e) { echo $e;}
![Page 5: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/5.jpg)
5
… or from command line
❙$ phar pack -f myapp.phar index.php directory/
❙$ phar list -f myapp.phar |-phar:///index.php|-phar:///directory/file.php|-phar:///directory/image.png
![Page 6: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/6.jpg)
6
Stubs
❙A “stub” is put on top of the file and executed when called
❙$phar->setStub( '<?php echo “Hello World!”; __HALT_COMPILER(); ?>');
❙http://example.com/myapp.phar
![Page 7: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/7.jpg)
7
webPhar
❙Phar has a front-controller for 1:1 mapping fromURLs to files in the phar
❙$phar->setStub( '<?php Phar::webPhar(); __HALT_COMPILER(); ?>');
❙http://example.com/myapp.phar/index.php❙http://example.com/myapp.phar/page2.php❙http://example.com/myapp.phar/directory/image.jpg
![Page 8: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/8.jpg)
Johannes Schlüter 8
ClosuresSPL
Streams
![Page 9: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/9.jpg)
9
A closer look
❙var_dump($callback);
object(Closure)#1 (0) {}
➔ Anonymous Functions/Closures are implemented as Objects of the type “Closure”
➔ Any object with an __invoke() method can be used as closure
![Page 10: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/10.jpg)
10
Closuresfunction fancy_count($arr) { $count = 0;
$callback = function($dat) use (&$count) { $count++; };
array_walk($arr, $callback); return $count;}echo fancy_count(array(0,1,2,3,4)); // 5
![Page 11: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/11.jpg)
11
Improved SPL support
❙SPL is the “Standard PHP Library”❙Until 5.3 it mainly focused on iterators❙PHP 5.3 introduces
❙SplDoublyLinkedList❙SplStack❙SplQueue, SplPriorityQueue❙SplHeap, SplMinHeap, SplMaxHeap❙SplFixedArray
![Page 12: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/12.jpg)
12
Stream-Wrapper Support
❙The include_path ini-Setting can include paths provided by stream wrappers
❙include_path = http://example.com/files:/local:.
❙Mainly thought for phar streams❙HTTP Streams now treat all HTTP response codes
correctly (e.g. 201 Created)❙Errors can also be suppressed using a context option
![Page 13: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/13.jpg)
DateTime
![Page 14: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/14.jpg)
14
Improved date support
❙Date arithmetics❙DateInterval represents the difference between to Dates❙DateTime::add(), DateTime::sub() can be used to apply an
interval to a date❙Dateperiod represents a period of time and allows iteration
![Page 15: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/15.jpg)
15
Dateperiod$begin = new DateTime( '2007-12-31' );$end = new DateTime( '2009-12-31 23:59:59' );
$interval = DateInterval::createFromDateString( 'last thursday of next month');
$period = new DatePeriod($begin, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
foreach ( $period as $dt ) { echo $dt->format( "l Y-m-d H:i:s\n" );}
![Page 16: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/16.jpg)
mysqlnd
![Page 17: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/17.jpg)
17
mysqlnd
❙PHP-specific replacement for the MySQL Client library (libmysql)
❙Developed by Sun/MySQL❙Deeply bound to PHP
❙Using PHP memory management❙Using PHP Streams❙No external dependencies
❙Not yet another MySQL extension but an internal library sitting below other extnesion❙Powers ext/mysql, mysqli and pdo_mysql
![Page 18: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/18.jpg)
18
mysqlnd
❙To compile PHP using mysqlnd use❙--with-mysql=mysqlnd❙--with-mysqli=mysqlnd❙--with-pdo-mysql=mysqlnd
❙Windows builds use mysqlnd by default
![Page 19: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/19.jpg)
19
mysqlnd Asynchronousboolean mysqli_query(string query, MYSQLI_ASYNC)int mysqli_poll( array $connections, array $except, array $rejected, int $tv_sec [, int tv_usec])mixed mysqli_reap_async_query( mysqli $connection)
![Page 20: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/20.jpg)
20
mysqlnd async
$shard1 = mysqli_connect('shard1', ...);$shard2 = mysqli_connect('shard2', ...);$shard3 = mysqli_connect('shard2', ...);$shard1->query('... FROM users ...', MYSQLI_ASYNC);$shard2->query('... FROM postings ...', MYSQLI_ASYNC);$shard3->query('... FROM postings ...', MYSQLI_ASYNC);
![Page 21: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/21.jpg)
21
mysqlnd async$all_links = array($shard1, $shard2, $shard3);$processed = 0;do { $links = $errors = $reject = array(); foreach ($all_links as $link) $links[] = $errors[] = $reject[] = $link; if (0 == ($ready = mysqli_poll($links, $errors, $reject, 1, 0)) continue; foreach ($links as $k => $link) { if ($res = mysqli_reap_async_query($link)) { mysqli_free_result($res); $processed++; } }} while ($processed < count($all_links));
![Page 22: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/22.jpg)
intl
![Page 23: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/23.jpg)
23
What is intl?
❙Internationalization parts of ICU❙ICU is the base library for PHP 6's Unicode implementation
❙Collations❙Output Formatting❙Normalization
![Page 24: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/24.jpg)
24
MessageFormatter
❙$fmt = new MessageFormatter("en_US", "{0,number,integer} monkeys on {1,number,integer} trees make {2,number} monkeys per tree");echo $fmt->format(array(4560, 123, 4560/123));
❙4,560 monkeys on 123 trees make 37.073 monkeys per tree
![Page 25: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/25.jpg)
25
MessageFormatter
❙$fmt = new MessageFormatter("de", "{0,number,integer} Affen auf {1,number,integer} Bäumen ergeben {2,number} Affen pro Baum");echo $fmt->format(array(4560, 123, 4560/123));
❙4.560 Affen auf 123 Bäumen ergeben 37,073 Affen pro Baum
![Page 26: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/26.jpg)
26
Much new stuff but still faster!?
❙Yes!❙New scanner (based on re2c instead of flex)❙Improved internal stack usage❙Improved access to internal data structures❙VisualStudio 9 builds for Windows❙Garbage Collection❙...
![Page 27: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/27.jpg)
Johannes Schlüter 27
Garbage Collection
![Page 28: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/28.jpg)
28
Reference counting
❙PHP's memory handling is based on reference counting.❙A PHP variable consists of a label ($label) and the variable
container (zval structure)❙PHP is counting the number of labels pointing to the same
variable container
❙<?php$a = new stdClass();$b = $a;unset($a);unset($b);?>
reference count = 1
reference count = 2
reference count = 1reference count = 0
![Page 29: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/29.jpg)
29
Cyclic references
❙ $a = new stdClass();$b = new stdClass();
$a->b = $b;$b->a = $a;
unset($a); unset($b);❙Using reference counting PHP can't see that the objects
aren't referenced from somewhere else❙Using refcount PHP can't free the memory till the end of the
script run
![Page 30: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/30.jpg)
30
New garbage collector
❙Now PHP can search for cyclic references from time to time
❙To en-/disable GC use❙zend.enable_gc php.ini setting❙gc_enable(), gc_disable()
❙If enabled the GC is trigger automatically or by❙gc_collect_cycles()
❙For complex applications this can reduce memory usage by the cost of CPU time
❙Unit-Tests!
![Page 31: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/31.jpg)
31
Diagram: Sebastian Bergmann4.3.11 4.4.7 5.0.5 5.1.6 5.2.5 5.3
time
![Page 32: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/32.jpg)
32
Diagram: Sebastian Bergmann
5.1.6 5.2.5 5.3
time
![Page 33: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/33.jpg)
33
Links
Downloads:http://downloads.php.net/johannes/ (Source)http://windows.php.net/ (Windows Binaries)http://snaps.php.net/ (Latest snapshots)
Documentation:php-src/UPGRADINGhttp://php.net/manual/http://wiki.php.net/doc/scratchpad/upgrade/53
![Page 34: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/34.jpg)
????
![Page 35: What's New In PHP 5.3: Volume Two](https://reader033.fdocuments.us/reader033/viewer/2022052905/558435afd8b42abf1e8b47cc/html5/thumbnails/35.jpg)
Thanks for your attention!
David Zülke ([email protected])http://twitter.com/dzuelke
Johannes Schlüter ([email protected])http://twitter.com/phperrorElephant logo by Vincent Pontier