Tài liệu PHP Unit Testing Agile software development with PHPUnit pptx

74 842 0
Tài liệu PHP Unit Testing Agile software development with PHPUnit pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

JUNE 2003 VOLUME II - ISSUE The Magazine For PHP Professionals PHP Unit Testing Agile software development with PHPUnit Industrial strength MVC Building a reusable development framework with Open Source tools Getting a grip on LDAP A coder's introduction to working with directory services Implementing search with Lucene Integrating a Java search engine API into your PHP site Use OOP to manage your forms www.phparch.com Implementing object-oriented form libraries that promote uniformity and reusability The WURFL project Extreme cross-platform WAP development with PHP Plus: Tips & Tricks, Product Reviews and much more Introducing the php|architect Grant Program This is the LAST month to submit your project for approval The deadline is June 18th! Hurry and submit your proposal As PHP’s importance grows on the IT scene—something that is happening every day—it’s clear that its true capabilities go well beyond what it’s being used for today The PHP platform itself has a lot of potential as a general-purpose language, and not just a scripting tool; just its basic extensions, even discounting repositories like PEAR and PECL, provide a highquality array of functionality that most of its commercial competitors can’t afford without expensive external components At php|a, we’ve always felt that our mission is not limited to try our best to provide the PHP community with a publication of the highest possible quality We think that our role is also that of reinvesting in the community that we serve in a way that leads to tangible results To that end, this month we’re launching the php|architect Grant Program, a new initiative that will see us award two $1,000 (US) grants to PHP-related projects at the end of June Participating to the program is easy We invite all the leaders of PHP projects to register with our website at http://www.phparch.com/grant and submit their applications for a grant Our goal is to provide a financial incentive to those projects that, in our opinion, have the opportunity to revolutionize PHP and its position in the IT world In order to be eligible for the Grant Program, a project must be strictly related to PHP, but not necessarily written in PHP For example, a new PHP extension written in C, or a new program in any language that lends itself to using PHP in new and interesting ways would also be acceptable The only other important restriction is that the project must be released under either the LGPL, the GPL or the PHP/Zend license Thus, commercial products are not eligible Submit Your Project Today! Visit http://www.phparch.com/grant for more information TABLE OF CONTENTS php|architect Departments INDEX EDITORIAL RANTS Features Building a reusable development framework with open source tools By Jason E Sweat Rant Mode: On - the PHP/MySQL 'Platform' NEW STUFF Industrial Strength MVC 24 Agile Software Development With PHPUnit By Michael Hüttermann 38 REVIEW SourceGuardian Pro By Peter James 59 Lucene Integrating a Java search engine API into your PHP site By Dave Palmer REVIEW PHPEdit By Peter James 70 30 TIPS & TRICKS By John W Holmes 42 Tailoring W@P sites with WURFL By Andrea Trasatti 49 Getting a grip on LDAP By Brian K Jones 73 exit(0); Worlds Apart By Marco Tabini 62 Object-oriented Form Management With PHP By Marco Tabini June 2003 · PHP Architect · www.phparch.com The designers of PHP offer you the full spectrum of PHP solutions Serve More With Less Zend Performance Suite Reliable Performance Management for PHP Visit www.zend.com for evaluation version and ROI calculator Technologies Ltd EDITORIAL RANTS EDITORIAL EDITORIAL Rant Mode: On - the PHP/MySQL 'Platform' Recently, it has come to my attention that there are some informational channels that have taken to calling ‘PHP/MySQL’ a ‘platform’, in the same vein as ASP.NET, J2EE and the like This, in my opinion, is nothing short of a travesty I will not name names (for the most part) regarding individual culprits, because it would only give them publicity However, there is a certain developer’s website which fails to list PHP without MySQL by its side It has ‘PHP & MySQL Tips and Tutorials’, ‘PHP & MySQL Apps and Reviews’, and a couple of other departments devoted to the PHP/MySQL ‘platform’, without a single hint that PHP can be used in other ways In addition, documentation for a certain large company’s commercial IDE also refers to this popular duo as a ‘platform’ Probably the most surprising offenders in the perpetuation of this stereotype are the PHP conference organizers MySQL plays such a prominent role in the talks and tutorials at PHP conferences that, if you go to one with no experience in PHP, you would leave thinking that PHP is primarily an interface to the MySQL database! This is unfortunate, to put it lightly Truthfully, it disgusts me Unfortunately, there are a number of conditions which currently exist in the world of PHP that could arguably be used to justify the actions of these groups For example, have you done a search for ‘PHP MySQL’ at Amazon lately? I did this recently and June 2003 · PHP Architect · www.phparch.com php|architect Volume II - Issue June, 2003 Publisher Marco Tabini Editor-in-Chief Brian K Jones brian@phparch.com Editorial Team Arbi Arzoumani Brian Jones Peter James Marco Tabini Graphics & Layout Arbi Arzoumani Administration Emanuela Corso Authors Andrea Trasatti, Brian K Jones, Dave Palmer, Jason E Sweat, Marco Tabini, Michael Hüttermann, Peter James php|architect (ISSN 1705-1142) is published twelve times a year by Marco Tabini & Associates, Inc., P.O Box 3342, Markham, ON L3R 6G6, Canada Although all possible care has been placed in assuring the accuracy of the contents of this magazine, including all associated source code, listings and figures, the publisher assumes no responsibilities with regards of use of the information contained herein or in all associated material Contact Information: General mailbox: Editorial: Subscriptions: Sales & advertising: Technical support: info@phparch.com editors@phparch.com subs@phparch.com sales@phparch.com support@phparch.com Copyright © 2002-2003 Marco Tabini & Associates, Inc — All Rights Reserved EDITORIAL counted 16 books devoted solely to the use of PHP with MySQL as a data source! Here is the very real truth: MySQL is NOT the only data source PHP is capable of working with There are scores of developers who need to know this Pass it on Quite honestly, I’m tired of downloading applications from Freshmeat and elsewhere which require MySQL, only to find that they also contain PHP code to implement some feature that should be offloaded to (or better, built into) the database! This extra code introduces bugs, makes it more difficult to maintain, and inevitably slows down the application, and in the process makes PHP look unnecessarily slow and bulky Note that this is not a rant targeted at people who are using MySQL because they have properly evaluated their needs and found it to be the best tool for the job Nor is it aimed at newbies using MySQL as an introduction to the world of data-driven development I’m simply trying to enlighten some poor souls who might think that MySQL is the only choice they have when it comes to using PHP for their development needs PHP has native support for Sybase, Oracle, DB2, Informix, MS SQL Server, and other databases (yes, there are other databases) Aside from databases, PHP has native support for alternative sources of data such as SNMP agents and LDAP directories In short, PHP is a very capable development platform without the help of MySQL In this month’s issue of php|architect, you can capture a glimpse of a couple of June 2003 · PHP Architect · www.phparch.com these different data sources in action As promised, I’ve written a coder’s overview of using PHP with LDAP It’s a very highlevel, gentle discussion, light on code and long on cold, hard facts you’ll need to know if a client’s environment ever forces you to code against an LDAP directory In addition, Jason Sweat returns this month with a look at using different ‘ready made’ open source tools and frameworks to lighten the load on enterprise application developers In the article, you’ll be able to get a feel for the kinds of things you can with some of the other databases out there (Jason’s article uses PostgreSQL, in particular) As always, php|architect will strive to bring you the information you’d expect from any publication of our kind This will include MySQL, of course However, we’ll also try to debunk any myths or misstatements regarding PHP that exist out in the wild, like the erroneous labeling of PHP and MySQL as some sort of unified ‘platform’ As always, your opinions on this and anything you find in the pages of php|architect are of great interest to all of us here – so make you voice heard in our inboxes or the forums at the php|architect website Enjoy! NEW STUFF What’s New! s NEW STUFF PHP and Java? F rom the rumor mill department—we've heard that something big is about to happen between Java and PHP, and that it will be announced at the JavaOne Conference on June 9th in San Francisco We not yet know what the announcement will be about—but rest assured that we have unleashed our hounds Keep an eye on our website on June 9th for more information! + MySQL Beta Certification Exam MySQL AB announced this month that the beta version of the MySQL Professional Certification exam is available With successful completion of the Professional Certification beta exam, you can earn a valid MySQL Professional Certification the most advanced MySQL credential to demonstrate strong proficiency in working with the MySQL database Through the MySQL certification program, MySQL software developers can earn one or more formal credentials that validate their knowledge, experience and skill with the MySQL database and related MySQL AB products This program now includes two certifications: MySQL Core Certification and MySQL Professional Certification The MySQL Core Certification provides MySQL users with a formal credential that demonstrates proficiency in SQL, data entry and maintenance, data extraction for reporting and more The MySQL Professional Certification is for the more experienced MySQL user who wants to certify his or her knowledge in MySQL database management, installation, security, disaster prevention and optimization For more information, visit MySQL.com June 2003 · PHP Architect · www.phparch.com = ? Pear Info Package Pear announced the release of a new info package This package generates a comprehensive information page for your current PEAR install The format for the page is similar to that for phpinfo() except using PEAR colors The output has complete PEAR Credits (based on the packages you have installed) and will show if there is a newer version than the one presently installed (and what it's state is) Each package has an anchor in the form pkg_PackageName - where PackageName is a casesensitive PEAR package name Visit PEAR.php.net to download the new package Mozilla Firebird Mozilla.org has announced the release of Firebird 0.6 Mozilla Firebird is a redesign of the Mozilla browser component, similar to Galeon, K-Meleon and Camino™, but written using the XUL user interface language and designed to be cross-platform This latest version includes:A New theme, Redesigned Preferences Window, Improved Privacy Options, Improved Bookmarks, Talkback Enabled, Automatic Image Resizing, Smooth Scrolling, MacOSx Support and much more For more information, or to download, visit Mozilla.org FEATURES FEATURES Industrial Strength MVC Building a Reusable Development Framework With Open Source Tools By Jason E Sweat In the May issue, “An Introduction to MVC Using PHP” showed you the general background and a simple demonstration script of the Model-View-Controller pattern This article aims to take you to the next step: applying these principals in a realistic application Introduction This article assumes that you have either read the aforementioned “An Introduction to MVC Using PHP” article, or that you are already somewhat familiar with the MVC pattern, OO programming in PHP, and have at least looked at the Phrame examples The previous article highlighted proper use of the MVC pattern, with business logic in the Model classes, presentation logic in the View classes, and application flow directed by the Controller classes (ActionController, Action, ActionForms and ActionForwards in Phrame) Where the previous article only stored data in the session, this article steps it up a notch towards the “real world” by making extensive use of a database The Application To give this article a little more “real world” flavor, I would like to start with a hypothetical set of requirements for the application The application is a management system for hyperlinks The people who commissioned the application have identified three key sets of requirements: users, administrators and infrastructure User: • The user will access this application as a web site • The list of links will be organized into groups June 2003 · PHP Architect · www.phparch.com • The main link list will contain all of the links in the application on a single page, so they can all be printed at once • Each page of the application will contain the current date • The user will be able to view a summary of all the link groups, and will be able to jump directly to that group on the main listing of links Administrator: • The Admin will be able to maintain the links using the web site • The site will be able to detect the Admin, and display a link to the editing pages as appropriate • The Admin will be able to add, modify or delete both link groups and links The Admin can change the sequence that both groups and links withing groups are presented in the application, ease of use is also important REQUIREMENTS PHP Version: 4.0.6 O/S: Any Database: PostgreSQL 7.3 Additional Software: Phrame, ADOdb, Smarty, Eclipse FEATURES • Security should be in place to prevent unauthorized users from becoming the application administrator, or from using the administrative functions without being authorized as the administrator Infrastructure • Security is a serious concern, in particular, and credentials used by PHP scripts to access the database should have the bare minimum rights required to perform the tasks required (in case the web site code is ever compromised) • The application needs to be “future proof”, specifically this web application might not be the only client and/or the only source/editor for links in this application • This application will transition to other resources for maintenance, so it is important that it is well structured for both flexibility and ease of maintenance • The application should be designed so HTML designers can alter the appearance of the application without changing any source code • The data should never become corrupted, i.e Links should never refer to a group that does not exist • To assist in debugging problems, the system should track the date and time at which groups and links are both created and modified Industrial Strength MVC A quick review of these requirements can tell us a few things The fact that the application is basically a web site means that PHP is certainly a leading candidate for implementation The requirement for transitioning to other resources to maintain the application, and the desire for a robust and flexible framework, push us in the direction of implementing an MVC-style application The fact that “each page” must have a date stamp, and possibly a link to the editing pages, tends to indicate we should establish some sort of a site rendering framework This is often implemented with headers and footers in templates Finally, with websiteindependent business logic, strict referential integrity, queries across multiple tables (at least if we model links and groups in separate tables) and date columns to be modified on each SQL request, it looks like we have moved somewhat beyond MySQL’s fast retrieval of simple queries sweet spot, and another RDBMS will be required Developing the Application To review the development of this application, I think it is appropriate to take a look at the overall infrastructure first, which dovetails into Models Next, reviewing how the Controller (Phrame) implements application flow in this application, and lastly how the views are implemented in this application Infrastructure The first decision is what language the web application will be constructed in Since this is a magazine devoted to PHP, I think that is an appropriate choice ;) The choice of PHP allows us to pull out our now familiar bag Nobody As the publishers of Ian's Loaded Snapshot we know OSCommerce! Hosts OSCommerce Better! 100's of OSCommerce powered sites rely on our years of experience with OSCommerce, direct We Guarantee It! PHP, mySQL and Curl Optimized for OSCommerce Free Shared Certificate & Integrated SSL Server 20+ Contributions Pre-Installed on MS1 Release Web Mail and Web Based File Manager Full FTP and phpMyAdmin Access Free Ongoing Hands-On Support Web Stats by Urchin Reports Free Installation and Configuration USE PROMO CODE: phpa Get an Extended Free Trial and Free Setup! June 2003 · PHP Architect · www.phparch.com 866-994-7377 or sales@chainreactionweb.com www.chainreactionweb.com www.chainreactionweb.com/reseller 10 REVIEWS Editing The editor in PHPEdit is amazing At its root, it’s just a plain old Windows editing environment, offering all of the standard Windows shortcut keys Beyond that, it is a highly-configurable editing environment offering full shortcut key customization, code completion, keyboard templates, bracket matching, positional marking, and contextual syntax highlighting The code completion abilities in PHPEdit are excellent At any time you can bring up the options available to you with Shift-Space The completion pop-up contains context-sensitive variable names, functions, constants, and more It is very thorough, and offers a small description of PHP functions as well Keyboard templates in PHPEdit are snippets of code that you shouldn’t always need to type An example of this is typing “fri”, followed by a space This inserts the following idiom: for($i = 0; $i < ; $i++){ PHPEdit positioned next to a bracket, it and its match are both underlined in red This should help track down even more errors The QuickMarks are a really cool feature Normally, IDE’s might let you set bookmarks (as PHPEdit does), allowing you to quickly jump from one part of your code to another QuickMarks take that one step further to define your actual position on a line This might be particularly useful when refactoring code You can stop editing your new function, drop a mark down, navigate to where you want to copy some code from, copy it into the clipboard, then hit Shift-Escape This will take the code you just copied, and replace your last QuickMark with it Now that’s efficient! As a web developer, you will often have mixed content in your pages PHPEdit’s contextual syntax highlighting dims out the HTML content when you’re editing the PHP code, and dims out the PHP code when you’re editing the HTML This can remove distractions, and help maintain your focus on what you are currently editing } // for and places the cursor right before the second semicolon in the ‘for’ statement You can design your own keyboard template to suit any situation Very cool Any type of bracket or quotation mark is automatically closed when started This can help prevent some of those more elusive parse errors A related feature is automatic bracket matching If your insertion cursor is Other features PHPEdit is completely scriptable All operations in the application and its plugins are defined by commands These commands can be mixed together and assigned to new toolbar buttons or shortcut keys This means that you can completely tailor the application to your liking, as well as create complex operations to run at the click of a button Figure June 2003 · PHP Architect · www.phparch.com 60 REVIEWS As a nice bonus, PHPEdit comes with an integrated code beautifier This little beauty, which also can ship as a separate application, is very useful in dusting off those old scripts, and keeping your new ones up to scratch It comes with a number of configuration options, and works very nicely PHPEdit also comes with a full plugin API for both compiled and, get this, PHP plugins This means that you can extend PHPEdit using PHP! How cool is that? Any supported help document can be integrated into PHPEdit This means that you can add just about any structured software documentation you want to the help window PHP, PostgreSQL, and MySQL documentation can all live harmoniously in the same place, even though one might be a CHM file, one might be DocBook, and one might be an indexed helpfile Adding a documentation type is as simple as editing three lines in an XML file Very cool What I liked Well, just about everything, actually What I didn’t like Not too much [ Editor’s note: It only runs under Windows :-( ] I did not have great success with the debugger This may have been due to my setup, but I tried it on two different platforms with little success Regardless, there should be more documentation on the setup of the debugger on different platforms for PHPEdit June 2003 · PHP Architect · www.phparch.com PHPEdit In Conclusion I must admit that the version of PHPEdit that I tested was a development version (0.7.1.129), and did crash occasionally on my Windows XP box I felt, however, that I’d get a better idea of the direction this application was taking by testing it over the stable version (0.6 – released in late 2001) Even though it was not a stable release, the functional behavior was very solid All of the features I mentioned above (with the exception of the debugger) worked fine, with few surprises I would enthusiastically recommend this editor to anyone, including myself (the purist) It has a feature-set that can make newbies look like pros, and pros look like gods With a working debugger and a stable release, this gives a number of the commercial editors out there something to think about I’m giving PHPEdit a 4.5 out of php|a 61 FEATURES FEATURES Object-oriented Form o Management With PHP (and an Eye on PHP5) By Marco Tabini While a library for creating forms may add too much overhead to a high-traffic website and leave too little room for customization, management sites offer a perfect scenario for implementing object-oriented form libraries that promote uniformity and reusability I f you regularly create web pages, chances are that you also regularly create HTML forms Personally, I find forms one of the least fun parts of creating web pages It’s not that I really like writing HTML code in general, mind you, but forms are definitely at the top of my Top 10 HTML Hate List On top of the normally unpleasant syntax of HTML, forms involve actually soliciting information from the user This usually requires a good amount of attention to detail in order to ensure that someone using your website, either on purpose or by mistake, will not wipe out half your database at the click of his mouse Believe me, it’s happened, and it will happen again When you’re writing forms for a high-traffic website, you really have no choice but to create your HTML code by hand Each page often has a different look, and the performance constraints of high traffic loads make it difficult to justify the creation of any aiding tool, such as a library A possible alternative, naturally, would be to create a library that generates the HTML code based on your specifications, but that would still be complex and impractical Backend systems, on the other hand, are a completely different story Most of the time, they not suffer from the same bandwidth and design constraints June 2003 · PHP Architect · www.phparch.com as their frontend counterparts For one thing, chances are that only a very limited number of people will be using a backend system (which is often secured through a username/password authentication scheme exactly to ensure that only the right people can access it) Additionally, where a frontend website requires diversity and creativity in design, backend systems actually promote linearity, simplicity and consistency in their design A Form Library For the Ages A library for managing HTML forms can bring a number of benefits to your application: • Consistency—if all the forms are generated by the same library, they will all look similar and behave in a similar way (unless you need them to be different) • Reusability—if you plan things the right REQUIREMENTS PHP Version: Any O/S: Any Code Directory: forms 62 FEATURES way, you will have to write your code only once and then reuse it in all your scripts • Safety/Ease of Maintenance—a single codebase means fewer errors that only have to be fixed in a single location • Extendibility—you can build on your existing code to implement additional functionality throughout your entire codebase Clearly, a library also has some limitations First of all, you won’t be able to create a completely unique design for each of your forms, although, as we’ll see later on, a properly designed library codebase can offer a good level of customization without compromising the uniformity of the interface Additionally, no matter how efficient your code is, a library will introduce a certain amount of overhead that you have to take into consideration It might not be enough for you to worry about if you’re working on your online store’s backend, but it will be there nonetheless Although I am not a big fan of object-oriented programming (OOP), I cannot deny that there are several applications for which it is a perfect fit In my experience, form management is one of them—at my company, we’ve been using the same forms library for close to two years now Although we’ve made all sorts of improvements, the basic layout has pretty much remained unchanged from the beginning, resulting in a solid codebase that has grown to encompass such esoteric user controls as WYSIWYG HTML editors, spin editors, and so forth Another good reason to use objects—where they make sense—is that PHP5 is becoming more and more a reality and, with its introduction, the level of support for OOP will increase significantly Where right now making an object-oriented application work requires a bit of patience and a few counterintuitive hacks, with PHP5 everything will become much easier and, to a certain extent, provide slightly better performance Object-oriented Problems In PHP4, objects are treated like any other variable This causes a series of rather peculiar behaviours that, to the programmer who has had the opportunity to work with OOP before, may look rather odd As an example, take a look at the script shown in Listing Following the normal rules of OOP, one would expect that when the script is executed, the value “test” will be loaded in the $value member of the a class and then printed out This is, indeed, what happens if you run the script through PHP5 If you execute the code through PHP4, however, the interpreter will print “Not changed” If you are familiar with OOP and have never worked with it in PHP4, this is bound to drive you insane, as there is apparently no June 2003 · PHP Architect · www.phparch.com Object-oriented Form Management With PHP logical explanation for this behaviour You’d probably end up either discarding object-oriented PHP, or filing a bug report with the PHP Team, and find out that this is not a bug at all, but a completely expected “feature” of the language Because an object is just another variable, when you are inside the foreach loop, the interpreter creates a copy of each object found in the array and lets your script manipulate it When you alter the contents of each object, you’re really working on a copy—actually a completely separate instance of your class that is completely discarded once the foreach loop ends Thus, you never really get to touch the object that is actually stored in the array, and that’s why the $value member doesn’t change Solving this problem is actually pretty easy—you just need to manipulate the array directly, for example by using this approach: $keys = array_keys ($b) foreach ($keys as $c) $c->value = ‘test’; You will encounter a similar problem when calling functions, since any objects you pass by value will be copied before being handed over to the function’s code In this case, however, all you need to is pass your objects by reference Passing by reference means that, instead of creating a copy of your variables for use within the function, you require the interpreter to pass a reference (something akin to a pointer) to them As a result, they will be manipulated directly by the function’s code Passing a variable by reference is very easy—all you have to is prepend an ampersand (&) to its name when you declare your function: function f ($obj) function f (&$obj) // Bad // Good Listing 1 10 11 12 13 14 15 16 17 18 19 20 63 FEATURES Designing Your Dream Form Manager Before examining any code, it’s a good idea to decide what features we want our form manager to support First of all, even though we have already decided to sacrifice design flexibility in exchange for code reusability, it would be nice to still have at least some level of control over how things are displayed For example, we can decide that every element has a text description associated with it, and that we want to have control over how the following HTML elements are rendered: • The code before the form begins • The code before and after the text associated with an element • The code before and after the element itself • The code after the form ends How we provide this functionality? Easy enough— we use some external (global) functions that provide it My version of these functions, which is extremely simple, is shown in Listing 2; as you can see, it wraps the form around a table, and then puts each element in its own row Building the Form Class The next step consists of designing the class that will actually represent the form manager Its responsibilities include holding each of the elements of the class, handling values and validation and managing the overall rendering process (that is—making sure that the entire class is sent to the browser) Validation is a particularly important process that can significantly shorten your development time Throughout most of your scripts, you will likely have to perform common validation operations on your controls For example, you’ll have to ensure that a “required” field has been filled out, or that a text value entered by the user is a valid integer With a bit of forethought, most of these operations can be built into your form management framework, so that the next time they will be handled automatically by your classes rather than having to be handled manually The form class, which you can see in Listing 3, contains only a minimal amount of code, since it essentially acts as a container and dispatch point for working on the individual elements A proper OOP design would require an interface for accessing and manipulating the elements through CForm However, the PHP4 OOP framework, which lacks the concept of member protection, does not really encourage this approach and, therefore, our class will simply allow outside callers to access the $elements array directly as needed Note that the items of the CForm::$elements array are actually named using the name of each control as their insertion takes place This way, it will be possible to easily address them from the outside, for June 2003 · PHP Architect · www.phparch.com Object-oriented Form Management With PHP Listing 2 10 11 12 13 example after a form has been submitted and you want to retrieve the resulting values The Render() method, which is used to actually create the HTML code needed to display the form, automatically adds a hidden element to the form who’s name is based on the class name and a combination of characters that, while maintaining full compatibility with the HTML specifications, is unlikely to occur as a man-made element name This mechanism is used to determine whether the form has been submitted; while there are apparently easier ways to perform the same operation (such as checking whether there are values in the $_REQUEST or $_POST arrays), they all have their limitations For example, suppose you have two forms in the same page—a situation not all that uncommon Since only one of them can actually be submitted, it is 64 FEATURES Object-oriented Form Management With PHP Listing 3 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

Ngày đăng: 24/01/2014, 14:20

Từ khóa liên quan

Mục lục

  • jun_03_cover.qxd

  • June 2003 - Volume II - Issue 6

    • Features 

      • Industrial Strength MVC 

        • Building a reusable developm...

        • By Jason E. Sweat

        • Agile Software Development ... 

          • By Michael Hüttermann

          • Lucene 

            • Integrating a Java search en...

            • By Dave Palmer

            • Tailoring W@P sites with WURFL 

              • By Andrea Trasatti

              • Getting a grip 

                • By Brian K. Jones

                • Departments 

                  • EDITORIAL RANTS 

                    • Rant Mode: On - the PHP/MyS...

                    • NEW STUFF

                    • REVIEW 

                      • SourceGuardian Pro

                      • By Peter James

                      • REVIEW 

                        • PHPEdit

                        • By Peter James

                        • TIPS & TRICKS 

                          • By John W. Holmes

                          • exit(0); 

                            • Worlds Apart

Tài liệu cùng người dùng

Tài liệu liên quan