1 / 52

PHP 5 Sucks! PHP 5 Rocks!

PHP 5 Sucks! PHP 5 Rocks!. Adam Trachtenberg eBay Technical Evangelist amt@php.net. In the Beginning. SOAP Sucks! SOAP Rocks! Conclusion: SOAP Sucks and Rocks! mod_perl 2.0 Sucks! mod_perl 2.0 Rocks! Conclusion: mod_perl 2.0 Sucks! PHP 5 Sucks! PHP 5 Rocks! Conclusion: ???.

faris
Télécharger la présentation

PHP 5 Sucks! PHP 5 Rocks!

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PHP 5 Sucks!PHP 5 Rocks! Adam Trachtenberg eBay Technical Evangelist amt@php.net

  2. In the Beginning... • SOAP Sucks! SOAP Rocks! • Conclusion: SOAP Sucks and Rocks! • mod_perl 2.0 Sucks! mod_perl 2.0 Rocks! • Conclusion: mod_perl 2.0 Sucks! • PHP 5 Sucks! PHP 5 Rocks! • Conclusion: ???

  3. There and Back Again • I decide I should stop “learning” PHP 5 via the mailing list and start actually programming in it. • The lies begin • “I’m a pretty good PHP 4 programmer” • “I’ve already switched from 2 to 3, and 3 to 4, so I know how to migrate versions” • “Besides, documentation is for wimps.” • So, PHP 5 shouldn’t be too difficult to learn. • Right?

  4. Come Up With a Plan • Install PHP 5 • ??????? • $$$Profit!!!

  5. Step 1. Install PHP 5 • Check out latest version from CVS • Run ./buildconf • Copy over my PHP 4 config.nice file • Run ./config.nice

  6. Step 1. Install PHP 5: config.nice #! /bin/sh # # Created by configure './configure' \ '--prefix=/home/adam' \ '--with-zlib' \ '--with-dom=/home/adam/' \ "$@"

  7. Step 1. Install PHP 5: config.nice $ ./config.nice ... Configuring extensions checking whether to enable LIBXML support... yes checking libxml2 install dir... no configure: error: xml2-config not found. Please check your libxml2 installation.

  8. Step 1. Install PHP 5: config.nice $ ./config.nice --with-libxml-dir=/home/adam ... Thank you for using PHP.

  9. Step 2. ??????? • Maybe I should run some PHP 4 scripts and see how they work under PHP 5 • Let’s start with a simple DOMXML program

  10. Step 2. DOM <?xml version="1.0"?> <talk> <title>PHP 5 Rocks!</title> </talk>

  11. Step 2. DOM $dom = domxml_new_doc('1.0'); // create and append the root element, <talk> $talk = $dom->append_child($dom-> create_element('talk')); // create and append <title> to $talk $title = $talk->append_child($dom-> create_element('title')); // set the text node for $title $title->append_child($dom-> create_text_node('PHP 5 Rocks!')); // print DOM document as XML echo $dom->dump_mem(true);

  12. Step 2. DOM Fatal error: Call to undefined function domxml_new_doc() in /home/adam/php5/dom.xml on line 2

  13. Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, <talk> $talk = $dom->append_child($dom-> create_element('talk')); // create and append <title> to $talk $title = $talk->append_child($dom-> create_element('title')); // set the text node for $title $title->append_child($dom-> create_text_node('PHP 5 Rocks!')); // print DOM document as XML echo $dom->dump_mem(true);

  14. Step 2. DOM Fatal error: Call to undefined method DOMDocument::append_child() in /home/adam/php5/dom.xml on line 5

  15. Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, <talk> $talk = $dom->appendChild($dom-> createElement('talk')); // create and append <title> to $talk $title = $talk->appendChild($dom-> createElement('title')); // set the text node for $title $title->appendChild($dom-> createTextNode('PHP 5 Rocks!')); // print DOM document as XML echo $dom->dumpMem(true);

  16. Step 2. DOM Fatal error: Call to undefined method DOMDocument::dumpMem() in /home/adam/php5/dom.xml on line 17

  17. Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, <talk> $talk = $dom->appendChild($dom-> createElement('talk')); // create and append <title> to $talk $title = $talk->appendChild($dom-> createElement('title')); // set the text node for $title $title->appendChild($dom-> createTextNode('PHP 5 Rocks!')); // print DOM document as XML echo $dom->saveXML();

  18. Step 2. DOM <?xml version="1.0"?> <talk><title>PHP 5 Rocks!</title></talk>

  19. Step 2. DOM <?xml version="1.0"?> <talk> <title>PHP 5 Rocks!</title> </talk>

  20. Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, <talk> $talk = $dom->appendChild($dom-> createElement('talk')); // create and append <title> to $talk $title = $talk->appendChild($dom-> createElement('title')); // set the text node for $title $title->appendChild($dom-> createTextNode('PHP 5 Rocks!')); // print DOM document as XML $dom->formatOutput = true; echo $dom->saveXML();

  21. Step 2. DOM <?xml version="1.0"?> <talk> <title>PHP 5 Rocks!</title> </talk>

  22. Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, <talk> $talk = $dom->appendChild ($dom-> createElement ('talk')); // create and append <title> to $talk $title = $talk->appendChild ($dom-> createElement ('title')); // set the text node for $title $title->appendChild ($dom-> createTextNode ('PHP 5 Rocks!')); // print DOM document as XML $dom->formatOutput = true; echo $dom->saveXML();

  23. Step 2. DOM

  24. Step 2. DOM • DOM objects are now actually objects • Easy to integrate within OOP • Subclass them to define your own methods • DOM methods now use studlyCaps • Just like the rest of the world • DOM behaves like the specification • Properties are actually properties instead of methods

  25. Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, <talk> $talk = $dom->appendChild( new DOMElement('talk')); // create and append <title> to $talk $title = $talk->appendChild( new DOMElement('title')); // set the text node for $title $title->appendChild( new DOMText('PHP 5 Rocks!')); // print DOM document as XML echo $dom->saveXML();

  26. Step 2. DOM • Faster than before • Doesn’t leak memory • Supports more DOM features • Plays well with other XML extensions, like XSLT, XPath, and SimpleXML

  27. Step 2. DOM $talk = ' <talk> <title>PHP 5 Rocks!</title> </talk>'; $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($talk); // print out "PHP 5 Rocks!“ print $dom->firstChild->firstChild-> firstChild->nodeValue; PHP 5 Rocks!

  28. Step 2. DOM $talk = ' <talk> <title>PHP 5 Rocks!</title> </talk>'; $simplexml = simplexml_load_string($talk); // print out "PHP 5 Rocks!" print $simplexml->title; PHP 5 Rocks!

  29. Step 2. DOM • DOM Sucks! • SimpleXML Rocks!

  30. Step 2. ??????? • Maybe I should run some PHP 4 scripts and see how they work under PHP 5 • Let’s start with a simple DOMXML program • Well, that didn’t go as smoothly as I thought, but I can always rely on MySQL • After all MySQL and PHP put the MP in LAMP • This will definitely work! • Right?

  31. Step 2. MySQL $db = mysql_connect($server, $user, $password); mysql_select_db("users"); $r = mysql_query("SELECT user FROM users"); while ($row = mysql_fetch_assoc($r)) { print $row['user']; } mysql_close();

  32. Step 2. MySQL Fatal error: Call to undefined function mysql_connect() in /home/adam/php5/mysql.php on line 3

  33. Step 2. MySQL • MySQL client libraries are no longer bundled with PHP! • You must download and install them yourselves.

  34. Step 2. MySQL • While I’m at it, I might as well upgrade to MySQL 4.1.

  35. Step 2. MySQL • However, MySQL 4.1 uses a new client protocol... • Turns out, there’s a new MySQL extension dedicated to MySQL 4.1 and greater • MySQLi • The “i” stands for improved

  36. Step 2. MySQL $db = mysql_connect($server, $user, $password); mysql_select_db("users"); $r = mysql_query("SELECT user FROM users"); while ($row = mysql_fetch_assoc($r)) { print $row['user']; } mysql_close();

  37. Step 2. MySQL $db = mysqli_connect($server, $user, $password); mysqli_select_db("users"); $r = mysqli_query("SELECT user FROM users"); while ($row = mysqli_fetch_assoc($r)) { print $row['user']; } mysqli_close();

  38. Step 2. MySQL Warning: Missing argument 2 for mysqli_select_db() in /home/adam/php5/mysql.php on line 7

  39. Step 2. MySQL $db = mysqli_connect($server, $user, $password); mysqli_select_db($db, "users"); $r = mysqli_query($db, "SELECT user FROM users"); while ($row = mysqli_fetch_assoc($r)) { print $row['user']; } mysqli_close($db);

  40. Step 2. MySQL $db = mysqli_connect($server, $user, $password, "users"); $r = mysqli_query("SELECT user FROM users"); while ($row = mysqli_fetch_assoc($r)) { print $row['user']; } mysqli_close();

  41. Step 2. MySQL • You now need to always pass a database handle to MySQL functions • Also, some older functions have been removed • So, I compiled a list of functions that have been changed or deleted between the MySQL and MySQLi extension

  42. Step 2: MySQL • mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string pa\ssword [, bool new [, int flags]]]]]) • mysql_select_db(string database_name [, int link_identifier]) • mysql_query(string query [, int link_identifier]) • mysql_fetch_field(resource result [, int field_offset]) • mysql_change_user(string user, string password [, string database [, resource link_identifier]]) • mysql_real_escape_string(string to_be_escaped [, int link_identifier]) • mysql_affected_rows([int link_identifier]) • mysql_close([int link_identifier]) • mysql_error([int link_identifier]) • mysql_errno([int link_identifier]) • mysql_get_host_info([int link_identifier]) • mysql_get_proto_info([int link_identifier]) • mysql_get_server_info([int link_identifier]) • mysql_info([int link_identifier]) • mysql_insert_id([int link_identifier]) • mysql_ping([int link_identifier]) • mysql_stat([int link_identifier]) • mysql_thread_id([int link_identifier]) • mysql_create_db($database, $db); • mysql_drop_db($database, $db); • mysql_escape_string($string); • mysql_field_flags($result, $i); • mysql_field_len($result, $i) • mysql_field_name($result, $i) • mysql_field_table($result, $i) • mysql_field_type($result, $i) • mysql_db_name($result, $i) • mysql_db_query($database, $query, $db); • mysql_list_dbs($db); • mysql_list_fields($database, $table, $db) • mysql_list_processes($db) • mysql_list_tables($database, $db) • mysql_pconnect($hostname, $username, $password); • mysql_result($result, $column); • mysql_tablename($result, $i) • mysql_unbuffered_query()

  43. Step 2. MySQL • Object-oriented interface • Prepared statements • Bound input and output parameters • SSL connections • Multi-query function • Subselects • Internationalization • Whole lots more! • This rocks!

  44. Step 2. MySQL $db = new mysqli($server, $user, $password, "users"); $r = mysqli->query("SELECT user FROM users"); while ($row = $r->fetch_assoc()) { print $row['user']; } unset($db);

  45. Step 2. MySQL $db = new mysqli($server, $username, $password, "users"); $stmt = $db->stmt_init(); if ($stmt->prepare("SELECT user FROM users")) { $stmt->bind_result($user); $stmt->execute(); while ($stmt->fetch()) { print $user; } } unset($db);

  46. Step 3. $$$Profit!!! • The good news is that I’ve shown you (almost) all the sucky parts of PHP 5. • Everything else rocks!

  47. Step 3. $$$Profit!!! • Object-oriented programming • Constructors • Destructors • Public, protected, and private properties and methods • Interfaces • Abstract classes • Class type hints • Static properties and methods • Final properties and methods • A whole suite of magical methods • Proper references

  48. Step 3. $$$Profit!!! • Object-oriented programming • XML • DOM • SimpleXML • XSLT • XPath • SAX • XML Pull Parser

  49. Step 3. $$$Profit!!! • Object-oriented programming • XML • SQLite • Embedded database library • Guarantees access to database in PHP 5 • Not “Lite” at all: • Transactions • Triggers • Subselects

  50. Step 3. $$$Profit!!! • Object-oriented programming • XML • SQLite • Iterators • Error handling with exceptions • SOAP extension • Streams, wrappers, and filters • Reflection classes • Better command line processing • Compliant HTML from Tidy

More Related