Presentation is loading. Please wait.

Presentation is loading. Please wait.

PHP 5 Sucks! PHP 5 Rocks! Adam Trachtenberg eBay Technical Evangelist

Similar presentations


Presentation on theme: "PHP 5 Sucks! PHP 5 Rocks! Adam Trachtenberg eBay Technical Evangelist"— Presentation transcript:

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

2 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist In the Beginning... 1.SOAP Sucks! SOAP Rocks! Conclusion: SOAP Sucks and Rocks! 2.mod_perl 2.0 Sucks! mod_perl 2.0 Rocks! Conclusion: mod_perl 2.0 Sucks! 3.PHP 5 Sucks! PHP 5 Rocks! Conclusion: ???

3 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Come Up With a Plan 1. Install PHP 5 2. ??????? 3. $$$Profit!!!

5 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 1. Install PHP 5 1.Check out latest version from CVS 2.Run./buildconf 3.Copy over my PHP 4 config.nice file 4.Run./config.nice

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

7 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 1. Install PHP 5: config.nice $./config.nice --with-libxml- dir=/home/adam... Thank you for using PHP.

9 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM PHP 5 Rocks!

11 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = domxml_new_doc('1.0'); // create and append the root element, $talk = $dom->append_child($dom-> create_element('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM Fatal error: Call to undefined function domxml_new_doc() in /home/adam/php5/dom.xml on line 2

13 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, $talk = $dom->append_child($dom-> create_element('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM Fatal error: Call to undefined method DOMDocument::append_child() in /home/adam/php5/dom.xml on line 5

15 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, $talk = $dom->appendChild($dom-> createElement('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM Fatal error: Call to undefined method DOMDocument::dumpMem() in /home/adam/php5/dom.xml on line 17

17 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, $talk = $dom->appendChild($dom-> createElement('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM PHP 5 Rocks!

19 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM PHP 5 Rocks!

20 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, $talk = $dom->appendChild($dom-> createElement('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM PHP 5 Rocks!

22 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, $talk = $dom->appendChild ($dom-> createElement ('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM Warning 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.

24 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM 1.DOM objects are now actually objects Easy to integrate within OOP Subclass them to define your own methods 2.DOM methods now use studlyCaps Just like the rest of the world 3.DOM behaves like the specification Properties are actually properties instead of methods

25 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $dom = new DOMDocument('1.0'); // create and append the root element, $talk = $dom->appendChild( new DOMElement('talk')); // create and append 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM 4.Faster than before 5.Doesn’t leak memory 6.Supports more DOM features 7.Plays well with other XML extensions, like XSLT, XPath, and SimpleXML

27 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $talk = ' PHP 5 Rocks! '; $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($talk); // print out "PHP 5 Rocks!“ print $dom->firstChild->firstChild-> firstChild->nodeValue; PHP 5 Rocks!

28 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM $talk = ' PHP 5 Rocks! '; $simplexml = simplexml_load_string($talk); // print out "PHP 5 Rocks!" print $simplexml->title; PHP 5 Rocks!

29 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. DOM DOM Sucks! SimpleXML Rocks!

30 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. MySQL Fatal error: Call to undefined function mysql_connect() in /home/adam/php5/mysql.php on line 3

33 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. MySQL MySQL client libraries are no longer bundled with PHP! You must download and install them yourselves.

34 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. MySQL While I’m at it, I might as well upgrade to MySQL 4.1.

35 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 2. MySQL Warning: Missing argument 2 for mysqli_select_db() in /home/adam/php5/mysql.php on line 7

39 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist 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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 3. $$$Profit!!! The good news is that I’ve shown you (almost) all the sucky parts of PHP 5. Everything else rocks!

47 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 3. $$$Profit!!! 1.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 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 3. $$$Profit!!! 1.Object-oriented programming 2.XML DOM SimpleXML XSLT XPath SAX XML Pull Parser

49 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 3. $$$Profit!!! 1.Object-oriented programming 2.XML 3.SQLite Embedded database library Guarantees access to database in PHP 5 Not “Lite” at all: Transactions Triggers Subselects

50 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist Step 3. $$$Profit!!! 1.Object-oriented programming 2.XML 3.SQLite 4.Iterators 5.Error handling with exceptions 6.SOAP extension 7.Streams, wrappers, and filters 8.Reflection classes 9.Better command line processing 10.Compliant HTML from Tidy

51 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist In the Beginning... 1.SOAP Sucks! SOAP Rocks! Conclusion: SOAP Sucks and Rocks! 2.mod_perl 2.0 Sucks! mod_perl 2.0 Rocks! Conclusion: mod_perl 2.0 Sucks! 3.PHP 5 Sucks! PHP 5 Rocks! Conclusion: PHP 5 Rocks!

52 Why PHP 5 Sucks! Why PHP 5 Rocks! Adam Trachtenberg: eBay Evangelist $$$Profit!!! Shameless Plug


Download ppt "PHP 5 Sucks! PHP 5 Rocks! Adam Trachtenberg eBay Technical Evangelist"

Similar presentations


Ads by Google