PHP 5 Power Programming 218
PHP 5 Power Programming | |
author | Andi Gutmans, Stig Saether Bakken, Derick Rethans |
pages | 720 pages |
publisher | Prentice Hall/PTR |
rating | 9 |
reviewer | Mary Norbury-Glaser |
ISBN | 013147149X |
summary | PHP 5 Power Programming |
Chapter 1 sets the stage by asking "What Is New in PHP 5"? The chapter begins with a quote from John Scully: "The best way to be ready for the future is to invent it," which perfectly describes the authors: Andy Gutmans and Zeev Suraski have continued to push the PHP project to improve on the original foundation and to add cleaner programming enhancements. The leap from v.4 to v.5 is no exception, as this new version has brought singular advances: OO programming with PHP enjoys a leap forward in focus with a complete redesign of its object model, a completely re-written MySQL extension (MySQLi), support for SQLite, a new mechanism for handling errors via exceptions, a suite of re-written XML extensions based on the libxml2 library, a C-based implementation of SOAP and a new memory manager.
Following this tour of the new features of PHP 5, the reader is exposed to a brief chapter on the basic language of PHP. An experienced developer can skip this chapter, but it's a very good overview of the syntax including variables and superglobals, basic data types (integers, strings, booleans, arrays, constants), operators, control structures (conditional, loop, code) and functions.
PHP 5's OO support is the subject of Chapter 3. Object oriented programming was introduced in PHP 3 but it was in an extremely elementary form and while it was improved upon in PHP 4, it truly comes into its own in PHP 5. Covered in this chapter are the basics of the OO model, object creation and lifetime, access restriction keywords and the benefits of using class inheritance, as well as tips for exception handling.
Chapter 4 is a well written chapter on advanced OOP and design patterns (strategy, singleton, factory and observer), with some very good code examples on iterators and the reflection API, which allows the programmer to collect information about his or her script at runtime.
Chapter 5, "How to Write a Web Application with PHP," is an excellent fusion of code and best practices in developing a complete dynamic web application based on PHP. The concept of good design practices is often overlooked in "how-to" manuals. Rather, many technical books focus on overcoming code issues and avoiding pitfalls associated with poor code execution. Here, the authors take time out to detail techniques on making scripts "safe" ("trust nobody, especially not the users of your web applications"). Bugs and security holes are a fact of life, and this chapter covers some very practical techniques to avoid consequences arising from weirdness caused by users as well as from deliberate attempts by bad guys to crack a site's security.
Databases are covered in depth in Chapter 6. SQL and SQLite are discussed (each with a section on strengths and weaknesses) before examining the new database-connectivity features of PHP5 using mysqli and sqlite extensions. PEAR DB is also presented, with a section on the pros and cons of using a database abstraction layer like PEAR DB. Connections, queries, fetching modes/results and other topics are well covered. I would have liked to see some additional discussion and implementation of SMARTY in this chapter. SMARTY is a template engine with an ability to cache templates into PHP scripts which saves on overhead and contributes to speed and efficiency.
Error handling is the topic of Chapter 7. Types of errors (undefined symbol errors, portability errors, runtime errors and PHP errors), PEAR errors (PEAR_error class, handling of PEAR errors and PEAR error modes) and exceptions (exceptions explained and the specifics of using exceptions) are treated adroitly.
"XML with PHP 5" in Chapter 8 will undoubtedly become a focal point of the book for many readers. Along with the addition of support for OO programming, using the new XML extensions are some of the most exciting developments in PHP 5. The XML implementation is standardized on libxml2, compliant with W3 standards and extremely efficient. This chapter introduces XML in PHP 5 with sections on the vocabulary of XML, parsing (SAX, DOM, XPath), the SimpleXML extension (very cool, because this allows the programmer to access the XML through a data structure representation, treating the information as objects), PEAR classes that deal with XML (XML_Tree, XML_RSS), converting XML and communicating with XML (XML-RPC, SOAP). PHP 5's new SOAP extension is a welcome improvement over previous PHP versions.
Following this excellent chapter is one on other valuable mainstream extensions: files and streams (I/O streams, compression streams, URL streams, locking, renaming and removing files, temporary files), regular expressions, date handling, graphics manipulation with GD ("gif draw" to old-timers, "graphics draw" to the youngsters) and multi-byte strings and character sets. This is a solid chapter encompassing the wide range of functions that are intrinsic to the core of PHP to the many favorite and practical extensions that are outside the core of PHP.
Chapters 10 through 12 deal with PEAR: installing PEAR, commands, packages and components. Stig Bakken's extensive knowledge and experience is obviously prevalent here. It's worth noting that you won't find a better single coverage of PEAR and PHP 5 anywhere else.
For those readers experienced in PHP 4 and who are looking to move to v.5 and are wondering what to expect during the transition, Chapter 13, "Making the Move", will be of particular interest. The authors suggest that in migrating to PHP 5, "you can encounter some minor incompatibilities" and address a number of these: using compatibility mode to revert to PHP 4 behavior, recognizing script problems using OO features and learning the new names and locations of files in the PHP 5 distro, among others. Users of PHP on the Windows platform may want to spend some time over this chapter (and maybe reconsider their choice of development platform!).
Designing for performance is the subject of Chapter 14, and the authors encourage the reader to plan for optimal performance during the design phase: benchmarking, profiling with Zend Studio's Profiler, APD (Advanced PHP Debugger) and Xdebug, using APC (Advanced PHP Cache) and ZPS (Zend Performance Suite), optimizing code using micro-benchmarks, rewriting in C and writing procedural versus OO code. This extensive chapter offers the reader a fairly complete set of tools and sage advice for more efficient design.
Chapter 15 is titled "An Introduction to Writing PHP Extensions," and introduces the extension API that allows developers to write custom PHP extensions. This isn't a chapter for everyone, since there are already a large number of available extensions and, as the authors note, unless you need to wrap an existing C library to give it an interface from PHP then you can easily skim or skip this chapter entirely. Note, though, that memory management has a section here and it's worth a read because of PHP 5's support for multi-threaded environments.
The final chapter of the book is called "PHP Shell Scripting," and explores the CLI SAPI (command line interface Server API). There is an introduction to PHP CLI shell scripts (how CLI differs from CGI, the shell scripting environment, parsing CL options, good practice) with some nice examples.
Appendices on PEAR and PECL (PHP Extension Community Library) Package Index, phpDocumenter format Reference and Zend Studio Quick Start Guide complete the volume.
The authors succeed in providing an excellent manual for "power programming" in PHP 5. There is terrific guidance here for many PHP developers and experienced Java, C++ and C# coders who are looking to either migrate to PHP 5 from v.4 or who are looking to gain experience in PHP programming. The experience the authors bring to the table is indisputable and their style of writing and the ease with which they bring new language and tools to their audience is admirable.
You can purchase PHP 5 Power Programming from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Upgrade to 5 (Score:1, Interesting)
Re:Upgrade to 5 (Score:5, Informative)
Out of curiousity how many people are using PHP5? My hosting still only supports 4.3.something. And I'm still doing my testing strictly on 4.x to match current hosting options.
I tried using PHP 5 with my web host. It was a little bit slower, probably because version 5 was compiled as a CGI instead of a module. I am sure a comparison of both as modules would have been pretty close, if not dead even. Anyway, everything worked fine. From what I can tell version 5 is good for backwards compatibility.
still on 4 too. (Score:3, Insightful)
That or they'll just when cpanel/plesk or what ever the contol panel of the day supports it..
Re:Upgrade to 5 (Score:4, Interesting)
Re:Upgrade to 5 (Score:2, Interesting)
Obviously all OO has a "this" (or similar) for self-referencing, however PHP5 *requires* its use for referencing class variables; it seems silly to always have to be explicit when standard scoping rules would apply.
You mean having a class initiate at the start without having to call upon it? Oh no! That's definately a step in the wrong direction.
It's obvious that a constructor is re
Re:Upgrade to 5 (Score:2, Insightful)
Re:Upgrade to 5 (Score:2)
AFAIK, PHP 5 lets you use either the classname or __construct as the constructor. Each approach has its pros and cons; it's nice to be free to make the choice.
Re:Upgrade to 5 (Score:2, Informative)
There is a backport available (Score:3, Informative)
Works great.
Re:Upgrade to 5 (Score:3, Funny)
Re:Upgrade to 5 (Score:3, Funny)
Re:Upgrade to 5 (Score:2)
in debian you can start the install after the 32bit unix time rolls over to january 1st 1970, and finish the install the same minute.
Re:Upgrade to 5 (Score:2, Informative)
For now, you will either have to scavenge the internet to find a host that supports it, or wait until it becomes more mainstream.
Another reason I believe that many hosts are not making the switch is that many popular PHP software has not been u
Re:Upgrade to 5 (Score:2)
And phpBB 3.0 (whenever it comes out) is supposed to work cleanly on PHP5.
Re:Upgrade to 5 (Score:2)
Maybe one day, they'll even ditch Exim.
Re:Upgrade to 5 (Score:2)
Re:Upgrade to 5 (Score:3, Informative)
After speaking with many hosts, they won't upgrade because their hosting package (ie: cpanel) doesn't support it yet. And they won't upgrade until that happens. The problem with cpanal supporting it is that some of the scripts they bundle (namely osCommerence) don't work in PHP5.
I've also found a lot that people still believe PHP5 is in beta and not compatible with PHP4 code. But here's the good word [php.net] on the situation from t
Re:Upgrade to 5 (Score:1)
Re:Upgrade to 5 (Score:2)
Re:Upgrade to 5 (Score:2)
Re:Upgrade to 5 (Score:4, Informative)
I do a lot of DOM / XSLT programming for freelance and for my job. I just refuse to use PHP4 when I don't have to do so. DomXML in PHP4 used functions in order to return objects.
E.g: $node->first_child();
Therefore, it was impossible to go:
E.g: $node->first_child()->attributes;
In PHP5, it's simply:
$node->firstChild->attributes;
I believe in PHP5, it's possible to call the method of an object returned directly ($obj->func()->func2()).
The upgrade from PHP4 to PHP5 is nowhere as painful as from PHP3 to PHP4. In fact, the only errors I ended up logging when I transitioned over were my own coding errors that didn't show up in PHP4 ($this->item was being referenced outside of a class).
I'm gonna be loading the MySQLi module on there when I get the chance. I've really been itching to do stuff like MySQLi::prepare outside of Pear:DB. Not to mention, being able to use SSL to connect to MySQL from PHP is a definate plus.
Re:Upgrade to 5 (Score:2)
My main upgrade problems:
- the aforementioned $this issue
- array_merge now requires that all parameters be arrays
The second seems like it wouldn't be a problem, but I was running various third party software that passed string to array_merge. Simple workarounds, and now PHP 5 (and even PDO [phpdoc.info]) in all its glory.
S
Re:Upgrade to 5 (Score:2)
http://bugs.php.net/bug.php?id=29372 [php.net]
I reported a bug, but they still didn't fix this for 5.0.3... Of course this doesn't happen in PHP4 since destructors don't exist. Eh.
Re:Upgrade to 5 (Score:2)
Oh, I'm sorry. We only take credit cards. I know you don't want to give us your name and all, but I don't feel like getting a Fecalgram [fecalgram.com] in the mail, and I certainly don't feel like meeting you by the docks.
Especially with that tapeworm and all.
Heheh, have a good one.
Re:Upgrade to 5 (Score:2)
I know, I know, the database shouldn't even be visible on the public network, etc...
But I'm looking into some PHP-GTK administration tools where I am, so I figure I'll poke a hole in the firewall to allow access to 3306 from my IP address, then have a secure socket connection between myself and the database.
So ultimately, SSL does come in handy in some cas
Re:Upgrade to 5 (Score:2)
All the systems on my current project (http://www.gamespace.net.au/), except the forums, where developed with PHP5 in mind, and while their development started with PHP4 as soon as 5 was stable they were cut over and a lot of the new features were implimented. The greatest feature in PHP5 apart from the much improved OO has to be __autoload.
If an attempt is made to access a class that the interpreter doesn't know about it will call a special function __autoload which can be use
On Windows? (Score:1, Interesting)
Re:On Windows? (Score:1, Flamebait)
Re:On Windows? (Score:2)
What webserver by the way? Also - what are the specs on the hardware?
It could be either:
1. Your webserver
2. Your hardware
3. (no offense) poor programming
4. Network problems
5. A combination of some or all of the above
Re:On Windows? (Score:1)
Re:On Windows? (Score:2)
Of course, Apache 2 does have the option to turn off multithreading which alleviates a large part of the issue, but also draws away from part of the reasoning behind switching to Apache 2 in th
Re:On Windows? (Score:2)
Re:On Windows? (Score:2)
Flamebait???? (Score:3, Interesting)
Re:On Windows? (Score:2)
Other books in this series (Score:5, Funny)
BASIC Operating System Design
Enterprise AppleScript Applications
Kernal Programming With Javascript
Re:Other books in this series (Score:5, Funny)
RTFM for Manual readers
How to click "Next, Next, Next, I Agree, Next, Next, Next, Finish" for Dummies
Re:Other books in this series (Score:1)
Open Source series of technical books (Score:3, Funny)
Having read the book... (Score:2, Informative)
Re:Having read the book... (Score:3, Informative)
If you want to learn about scaling a PHP application and making use of the new features in PHP5, I would heartily recommend buying George's book. Just check out t
Re:Having read the book... (Score:2)
Agreed, this is really the best programming book I've ever owned. It is more than a great PHP book, but a great software development book, as it covers things like coding standards, unit testing, error handling, source code management, and much more. I can't recommend this enough to any programmer, especially one moving to the "next step" with PHP coding.
I heard him speak last fall in Toronto and he was the first person to ever make OOP sound practical to do in web projects.
christ (Score:1, Troll)
Re:christ (Score:1)
Re:christ (Score:1)
Re:christ (Score:1)
Every built in function is available at php.net/whatever along with user comments and code snippets that are truly useful.
For an open-source project, PHP earns a lot of credibility just by having something so basic. It's not the best documentation but it's more than enough to get you started.
Re:christ (Score:2)
Re:christ (Score:2)
... laptops ...
FTA:
hahahaha - come on - unless the one chapter is bigger than most books, there is no way it does an *in-depth* coverage of databases.
Methinks the article is a bit trollish [tt].
Re:christ (Score:2, Insightful)
Re:christ (Score:2)
Meanwhile, for people who use PHP for a living, there are no books out there. There are dozens of "Learn PHP" books on the shelf at my local Borders (I was literally looking through them *yesterday*), but none for advanced development issues or project management.
Poor you. You have what you need. Damn him for lamenting his lack.
--
Evan
Re:christ (Score:2)
If there's something regarding SQL, I want how to validate serialized objects in a Oracle database, not how to use CREATE TABLE to make a MySQL pricelist. And I really don't care so much about tha
Re:christ (Score:2)
how many times can you rehash the real manual?
It is the real manual, written by the lead developers. Did you miss the part about how this was about PHP5? You know, the new one...
And what the fsck are you reading this thread for anyway, eh? Get back to yer sodding UML, we've got work to do, you prat.
Thanks for the heads up! (Score:3, Funny)
So by PHP's reckoning.....
1) Establish PHP
2) "Invent the future"
3) ????
4) Profit!/Use your hovercar for daily commute
Did you ever get the feeling that... (Score:5, Funny)
Probably. (Score:2)
Generally, a full re-design should be rare. The English language has had three total re-designs in the past one and a half thousand years, and there are those who would argue that some of those were unnecessary. (The "Campaign for Real English" argue that standardized spelling, for example, was a bad idea.) All other changes have been incremental.
Re:Did you ever get the feeling that... (Score:2)
Re:Software Evolves (Score:2)
Come on, that is obviously not always true. Sometimes things don't change because the users are happy with the version they have and refuse to upgrade to the newfangled version which does not add anything they need.
To put it another way, "change" and "improvement" are not always synonymous in software deve
I have this book (Score:3, Informative)
Covers lots of things even the basics, has some really good advice on form security and session security and explains how the hackers actually attempt to exploit loopholes in your forms and session data and how to get around this.
Has a guide to generating bar charts/graphs which I found really usefull. Has good info on XML and SOAP, SQLi and multiple queries.
It tends to have quite a beginners approach, but I'm not discrediting the book and dont let this put you off, the subject matter and topics covered make it more than worthwhile for php professionals and there is a wealth of information for migrators looking to use the new php5 (eg OOP) features.
I just have to say... (Score:3, Funny)
Re:I just have to say... (Score:2)
Re:I just have to say... (Score:2)
John Scully! No way! (Score:2)
Yeah, the sugar water king would ever have been that witty. Not only did John nearly butcher Apple, he didn't do much justice to the quote either.
Conception credit for this particular inventive remark is usually attributed to Alan Kay, leader of the software group at Xerox PARC that gave us Smalltalk and so many pieces of the modern GUI.
Re:John Scully! No way! (Score:2)
The Newton was Scully's. It turned a profit when the rest of Apple was tanking.
Good for Experienced OO programmers (Score:3, Informative)
That said, I don't think this book would really do a good job showing someone how to use the OO features effectively who had never been exposed to it before, and that's probably fine. Just don't expect its half ass coverage of design patterns to give you a whole lot if you haven't scene them before.
-K
PHP5 projects (Score:2, Informative)
PHP5 really is a nice step forward from PHP4. It's improved object support and exception handling make it easier to sell as a "real language" with management and clients. And PDO [php.net] looks quite promising as well. Unfortunately, it is hard to find hosts that support PHP5.
I've put together a set of componenets that I developed under a loose framework for PHP5, called phacade [madskills.com] , that provide some of the conveniences of ASP.NET and JavaServer Faces, without all the headeaches those two technologies seem to inclu
Re:PHP5 projects (Score:3, Informative)
I used the simpler OO in version 4 everywhere so I want to make sure I don't break anything. My favorite libraries - adodb and smarty - have all been ported to 5 so I don't see any problems there.
The biggest problem is support in some third-party apps we are looking at using. That and the fact that they don't freakin support postgresql which is where we're header with our internal data
Re:PHP5 projects (Score:2)
Most third party apps will gladly accept patches that make pgsql work. i've submitted a few can still recal in the dark recesses of my memory a few times.
Re:PHP5 projects (Score:2)
I was thinking more along the lines of jrandom php package that seems really cool but has decided to use mysql_* throughout the code instead of something like adodb or peardb.
Re:PHP5 projects (Score:2)
It's not like the DB layer just showed up last week or something.
Re:PHP5 projects (Score:2)
In fact I've got about 5 internal applications running that use it right now.
I was thinking more along the lines of jrandom php package that seems really cool but has decided to use mysql_* throughout the code instead of something like adodb or peardb.
Getting Free Electronic Versions? (Score:1)
Does anyone know where to obtain these free electronic versions of older books? I skimmed a couple Prentice Hall sites but couldn't find anything. Thanks!
Re:Getting Free Electronic Versions? (Score:5, Informative)
http://www.phptr.com/series/series.asp?ser=335494 [phptr.com]
Well, this is the main page. There's a link just after the intro.
Re:Getting Free Electronic Versions? (Score:2)
That's the list of all the books in the "Open Source Series." They're listed newest to oldest. Looks like this PHP 5 one will probably be available soon. It was released in October, and a book released in July is available. The ones that are electronically available have links to the PDF in the "Downloads" section on the book's page. Though the very oldest few don't seem to have that.
Slightly Offtopic (Score:2)
I had an email exchange with Ad Conrad, Debian's PHP Mantainer and he told me that as soon as Sarge is released as stable, he'd be uploading PHP5 to Debian. But it still seems to be far away.
R
PHP5 on Debian Sarge [was Re:Slightly Offtopic] (Score:2)
I've had no trouble with using this source on my sarge boxes, which are all running PHP5 and MySQL 4.1 with Apache 2 on the 2.6.8-10-amd64-k8-smp kernel. Actually they've been configured like that for quite a while now and have performed really well without incident.
deb http://people.debian.org/~dexter php5 sid-old
Coldfusion still wins my heart (Score:3, Interesting)
I was *shocked* when I found out PHP projects are coded for a specific database. In Coldfusion I can change database vendors merely by making a change on an admin page. All the Coldfusion code remains the same. Of course of you have to avoid non-standard SQL inside your queries.
Is PHP database support anywhere near Coldfusion's?
Not trolling, just would like to know.
Re:Coldfusion still wins my heart (Score:2, Informative)
Re:Coldfusion still wins my heart (Score:2)
Also, if I recall correctly, the ColdFusion server engine/component is not free, if that is the case is there any way to try it out?
Regrads,
Re:Coldfusion still wins my heart (Score:3, Interesting)
Do you also avoid language-specific coding just in case someone decides to switch your application to something other than Cold Fusion?
There's another school of thought - opposite to yours and commonly encountered among experienced enterprise database application programmers - that says if you are not taking advantage of your database's features you are choosing to ignore some of the most powerful tools in your arsenal. This opinion ari
Re:Coldfusion still wins my heart (Score:3, Insightful)
It's a mystery to me why this hasn't been included in PHP by default. I even entered a request for this in the bug lis
php: tired, Ruby on Rails: WIRED! (Score:2)
Re:php: tired, Ruby on Rails: WIRED! (Score:2)
I've been working on a time tracking system for keeping track on work I do for clients etc. It took me over two hours to get the basics up and running with PHP (I've been a PHP developer for six years, four commercially).
It took me ten minutes to do essentially the same thing in Ruby on Rails with no prior Rails experience and minimal Ruby experience.
It's just a toy application at the moment, but R
Re:php: tired, Ruby on Rails: WIRED! (Score:2)
And is there anything remotely like PHP on Rails?
Re:php: tired, Ruby on Rails: WIRED! (Score:2)
Re:php: tired, Ruby on Rails: WIRED! (Score:2)
Let's face it kiddos. Perl's a great language, but is so write-only it makes my head spin. PHP is read/write, but is still very verbose, but just enough to the point where it's codeable. Ruby's a
The move is slow! (Score:2)
We just switched over from php4 to php5. The result was that a few things broke, but it wasn't anything that couldn't be corrected.
The major odvantages of PHP5 lay in it's new bundled features such as the improved object model, integrated simplexml (anyone who has had to deal with the other XML parsers will really appreciate this!), and sqlite. There is of course more, but I'll leave that for you to discover ;)
Unfortunatly, it's not as easy for the newbies to install. Particularly where mysql is con
Hate to say this but... (Score:2)
Re:Hate to say this but... (Score:2)
Singletons... (Score:2)
Smarty (Score:2)
But there would be no (or much less) overhead, and no slowdown if you didn't use Smarty :) Many people consider it too bloated. I prefer pure PHP templating engine like Savant [phpsavant.com]: no need to reinvent the wheel (ie. PHP tags), no need to recompile templates, it is light
tough to power program with no decent tools... (Score:2)
If it were in Java I'd be joyfully extracting methods and auto renaming stuff up the wazoo, but I can't find any refactoring tools for PHP. It's actually easier to just rewrite the damn thing than slog through by hand and uni
mmh (Score:1)
Re:Hmm (Score:1)
*dons the asbestos underwear*
I don't believe that the language supporting OOP requires you to write using OOP constructs. Haven't used PHP in a while, so I could very well be wrong.
If the speed is the same for the majority of applications, it maintains all backwards compatibility, and it gets more users to develop in the F/OSS world... why not?
OO at last (Score:3, Interesting)
I am personally of the conviction that OO is among those things that are absolute necessities to keep the work of mediocre (sloppy) programmers like myself moderately sane and structured, as soon as the number of lines exceeds throwaway level, say, 10,000 lines or more. I can't read my own code, let alone that of somebody else, if it's more than 10,000 lines
Re:ASP.NET (Score:1)
ASP.NET might be faster but it only runs on 1 platform and its not even close to as widley deplpoyed as PHP nor is there that many free applications available written in ASP.NET to push adoption. For your own personal stuff or internal applications, sure ASP.NET is nice but if you want to write a web app for the masses, PHP is basically the only way to go.
Also, In the last 6 months I've made close to $30,000 porting Access applications to the LAMP platform. Almost enough for a Mercedes
Re:php5 (Score:2, Interesting)
I try to apply that Test when I feel dumb for putting stuff on my resume'.
Re:php5 (Score:5, Interesting)
For instance, I was actually asked to do an application for a client where scripting language and platform hadn't been decided. the mini-app had to generate images on the fly, include a search-engine style capability, etc. In ASP-land, I'd have to use an external DLL for the images and buy a searching script. In PHP-land, I used the built-in graphics library and phpdig. Although I think ASP.NET has its own built in graphics libraries, its simply much much harder to find free code for it. I know that might be an anathema to some, but why re-write barcode generating scripts or search functionality when a good alternative has already been written?
And that's how we win. (Score:2)
Re:The secret to PHP programming (Score:3, Interesting)
... and use a script to strip out all extra white space, line feeds, etc.
... and use make and cat to concatenate script fragments together rather than "include", "include_once", "require", "require_once", so as not to have to open a half-dozen files.
Re:PHP Engineer (Score:4, Funny)