1 / 52

PHP 5 Sucks

Adam Trachtenberg: eBay Evangelist. There and Back Again. I decide I ... Adam Trachtenberg: eBay Evangelist. Step 2. DOM. Fatal error: Call to undefined function ...

medwin
Télécharger la présentation

PHP 5 Sucks

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


    Slide 1:PHP 5 Sucks! PHP 5 Rocks!

    Adam Trachtenberg eBay Technical Evangelist amt@php.net

    Slide 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: ???

    Slide 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 Im a pretty good PHP 4 programmer Ive 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 shouldnt be too difficult to learn. Right?

    Slide 4:Come Up With a Plan

    Install PHP 5 ??????? $$$Profit!!!

    Slide 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

    Slide 6:Step 1. Install PHP 5: config.nice

    #! /bin/sh # # Created by configure './configure' \ '--prefix=/home/adam' \ '--with-zlib' \ '--with-dom=/home/adam/' \ "$@"

    Slide 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.

    Slide 8:Step 1. Install PHP 5: config.nice

    $ ./config.nice --with-libxml-dir=/home/adam ... Thank you for using PHP.

    Slide 9:Step 2. ???????

    Maybe I should run some PHP 4 scripts and see how they work under PHP 5 Lets start with a simple DOMXML program

    Slide 10:Step 2. DOM

    <?xml version="1.0"?> <talk> <title>PHP 5 Rocks!</title> </talk>

    Slide 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);

    Slide 12:Step 2. DOM

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

    Slide 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);

    Slide 14:Step 2. DOM

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

    Slide 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);

    Slide 16:Step 2. DOM

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

    Slide 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();

    Slide 18:Step 2. DOM

    <?xml version="1.0"?> <talk><title>PHP 5 Rocks!</title></talk>

    Slide 19:Step 2. DOM

    <?xml version="1.0"?> <talk> <title>PHP 5 Rocks!</title> </talk>

    Slide 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();

    Slide 21:Step 2. DOM

    <?xml version="1.0"?> <talk> <title>PHP 5 Rocks!</title> </talk>

    Slide 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();

    Slide 23:Step 2. DOM

    Slide 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

    Slide 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();

    Slide 26:Step 2. DOM

    Faster than before Doesnt leak memory Supports more DOM features Plays well with other XML extensions, like XSLT, XPath, and SimpleXML

    Slide 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!

    Slide 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!

    Slide 29:Step 2. DOM

    DOM Sucks! SimpleXML Rocks!

    Slide 30:Step 2. ???????

    Maybe I should run some PHP 4 scripts and see how they work under PHP 5 Lets start with a simple DOMXML program Well, that didnt 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?

    Slide 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();

    Slide 32:Step 2. MySQL

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

    Slide 33:Step 2. MySQL

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

    Slide 34:Step 2. MySQL

    While Im at it, I might as well upgrade to MySQL 4.1.

    Slide 35:Step 2. MySQL

    However, MySQL 4.1 uses a new client protocol... Turns out, theres a new MySQL extension dedicated to MySQL 4.1 and greater MySQLi The i stands for improved

    Slide 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();

    Slide 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();

    Slide 38:Step 2. MySQL

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

    Slide 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);

    Slide 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();

    Slide 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

    Slide 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()

    Slide 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!

    Slide 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);

    Slide 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);

    Slide 46:Step 3. $$$Profit!!!

    The good news is that Ive shown you (almost) all the sucky parts of PHP 5. Everything else rocks!

    Slide 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

    Slide 48:Step 3. $$$Profit!!!

    Object-oriented programming XML DOM SimpleXML XSLT XPath SAX XML Pull Parser

    Slide 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

    Slide 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

    Slide 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!

    $$$Profit!!! Shameless Plug
More Related