Your SlideShare is downloading. ×
PHP 5 Sucks. PHP 5 Rocks.
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PHP 5 Sucks. PHP 5 Rocks.

2,406
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,406
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PHP 5 Sucks! PHP 5 Rocks! Adam Trachtenberg eBay Technical Evangelist [email_address]
  • 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=&quot;1.0&quot;?>
    • <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->append C hild($dom->
    • create E lement('talk'));
    • // create and append <title> to $talk
    • $title = $talk->append C hild($dom->
    • create E lement('title'));
    • // set the text node for $title
    • $title->append C hild($dom->
    • create T ext N ode('PHP 5 Rocks!'));
    • // print DOM document as XML
    • echo $dom->dump M em(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=&quot;1.0&quot;?>
    • <talk><title>PHP 5 Rocks!</title></talk>
  • 19. Step 2. DOM
    • <?xml version=&quot;1.0&quot;?>
    • <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=&quot;1.0&quot;?>
    • <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->append C hild ($dom->
    • create E lement ('talk'));
    • // create and append <title> to $talk
    • $title = $talk->append C hild ($dom->
    • create E lement ('title'));
    • // set the text node for $title
    • $title->append C hild ($dom->
    • create T ext N ode ('PHP 5 Rocks!'));
    • // print DOM document as XML
    • $dom->formatOutput = true;
    • echo $dom-> saveXML ();
  • 23. Step 2. DOM This extension is EXPERIMENTAL . The behaviour of this extension -- including the names of its functions and anything else documented about this extension -- may change without notice in a future release of PHP. Use this extension at your own risk. Warning
  • 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 &quot;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 &quot;PHP 5 Rocks!&quot;
    • 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 LA MP
    • This will definitely work!
    • Right?
  • 31. Step 2. MySQL
    • $db = mysql_connect($server, $user, $password);
    • mysql_select_db(&quot;users&quot;);
    • $r = mysql_query(&quot;SELECT user FROM users&quot;);
    • 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(&quot;users&quot;);
    • $r = mysql_query(&quot;SELECT user FROM users&quot;);
    • while ($row = mysql_fetch_assoc($r)) {
    • print $row['user'];
    • }
    • mysql_close();
  • 37. Step 2. MySQL
    • $db = mysql i _connect($server, $user, $password);
    • mysql i _select_db(&quot;users&quot;);
    • $r = mysql i _query(&quot;SELECT user FROM users&quot;);
    • while ($row = mysql i _fetch_assoc($r)) {
    • print $row['user'];
    • }
    • mysql i _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, &quot;users&quot;);
    • $r = mysqli_query( $db, &quot;SELECT user FROM users&quot;);
    • while ($row = mysqli_fetch_assoc($r)) {
    • print $row['user'];
    • }
    • mysqli_close( $db );
  • 40. Step 2. MySQL
    • $db = mysqli_connect($server, $user, $password , &quot;users&quot; );
    • $r = mysqli_query(&quot;SELECT user FROM users&quot;);
    • 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 password [, 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, &quot;users&quot;);
    • $r = mysqli->query(&quot;SELECT user FROM users&quot;);
    • while ($row = $r->fetch_assoc()) {
    • print $row['user'];
    • }
    • unset($db);
  • 45. Step 2. MySQL
    • $db = new mysqli($server, $username, $password, &quot;users&quot;);
    • $stmt = $db->stmt_init();
    • if ($stmt->prepare(&quot;SELECT user FROM users&quot;)) {
    • $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
  • 51. 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: PHP 5 Rocks!
  • 52. $$$Profit!!! Shameless Plug

×