Advanced PHP Programming
.pdfAdvanced PHP
Programming
Advanced PHP
Programming
Apractical guide to developing large-scale Web sites and applications with PHP 5
George Schlossnagle
DEVELOPER’S
L IBRARY
Sams Publishing, 800 East 96th Street, Indianapolis, Indiana 46240 USA
Advanced PHP Programming
Copyright ♥ 2004 by Sams Publishing
All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical, photocopying, recording, or otherwise, without written permission from the publisher. No patent liability is assumed with respect to the use of the information contained herein. Although every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions. Nor is any liability assumed for damages resulting from the use of the information contained herein.
International Standard Book Number: 0-672-32561-6
Library of Congress Catalog Card Number: 2003100478
Printed in the United States of America
First Printing: March 2004
06 |
05 |
04 |
4 |
3 |
2 |
1 |
Trademarks
All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Sams Publishing cannot attest to the accuracy of this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.
Warning and Disclaimer
Every effort has been made to make this book as complete and as accurate as possible, but no warranty or fitness is implied.The information provided is on an “as is” basis.The author and the publisher shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book.
Bulk Sales
Pearson offers excellent discounts on this book when ordered in quantity for bulk purchases or special sales. For more information, please contact
U.S. Corporate and Government Sales 1-800-382-3419 corpsales@pearsontechgroup.com
For sales outside of the U.S., please contact
International Sales 1-317-428-3341
international@pearsontechgroup.com
Acquisitions Editor
Shelley Johnston
Development Editor
Damon Jordan
Managing Editor
Charlotte Clapp
Project Editor
Sheila Schroeder
Copy Editor
Kitty Jarrett
Indexer
Mandie Frank
Proofreader
Paula Lowell
Technical Editors
Brian France
Zak Greant
Sterling Hughes
Publishing Coordinator
Vanessa Evans
Interior Designer
Gary Adair
Cover Designer
Alan Clements
Page Layout
Michelle Mitchell
Contents v
Contents at a Glance
Introduction
IImplementation and Development Methodologies
1 Coding Styles
2Object-Oriented Programming Through Design Patterns
3 Error Handling
4 Implementing with PHP:Templates and the Web
5 Implementing with PHP: Standalone Scripts
6 Unit Testing
7 Managing the Development Environment
8 Designing a Good API
II Caching
9 External Performance Tunings
10Data Component Caching
11Computational Reuse
III Distributed Applications
12Interacting with Databases
13User Authentication and Session Security
14Session Handling
15Building a Distributed Environment
16RPC: Interacting with Remote Services
vi Contents
IV Performance
17Application Benchmarks:Testing an Entire Application
18Profiling
19Synthetic Benchmarks: Evaluating Code Blocks and Functions
V Extensibility
20PHP and Zend Engine Internals
21Extending PHP: Part I
22Extending PHP: Part II
23Writing SAPIs and Extending the Zend Engine Index
Contents vii
Table of Contents
Introduction 1
IImplementation and Development Methodologies
1 Coding Styles |
9 |
|
|
|
|
|
Choosing a Style That Is Right for You 10 |
|
|||||
Code Formatting and Layout |
10 |
|
||||
Indentation |
10 |
|
|
|
|
|
Line Length |
13 |
|
|
|
|
|
Using Whitespace |
13 |
|
|
|
||
SQL Guidelines |
14 |
|
|
|
|
|
Control Flow Constructs |
14 |
|
|
|||
Naming Symbols |
19 |
|
|
|
|
|
Constants and Truly Global Variables 21 |
|
|||||
Long-Lived Variables |
22 |
|
|
|
||
Temporary Variables |
23 |
|
|
|
||
Multiword Names 24 |
|
|
|
|||
Function Names |
24 |
|
|
|
|
|
Class Names |
25 |
|
|
|
|
|
Method Names |
25 |
|
|
|
|
|
Naming Consistency |
25 |
|
|
|
||
Matching Variable Names to Schema Names |
26 |
|||||
Avoiding Confusing Code |
27 |
|
|
|
||
Avoiding Using Open Tags |
27 |
|
||||
Avoiding Using echo to Construct HTML |
27 |
|||||
Using Parentheses Judiciously |
28 |
|
||||
Documentation 29 |
|
|
|
|
|
|
Inline Comments |
29 |
|
|
|
||
API Documentation |
30 |
|
|
|
||
Further Reading |
35 |
|
|
|
|
|
viii Contents
2Object-Oriented Programming Through Design Patterns 37
Introduction to OO Programming 38 |
||||
Inheritance |
40 |
|
||
Encapsulation |
41 |
|
||
Static (or Class) Attributes and Methods 41 |
||||
Special Methods 42 |
|
|||
A Brief Introduction to Design Patterns 44 |
||||
The Adaptor Pattern |
44 |
|||
The Template Pattern |
49 |
|||
Polymorphism |
50 |
|
||
Interfaces and Type Hints 52 |
||||
The Factory Pattern |
54 |
|||
The Singleton Pattern |
56 |
|||
Overloading |
58 |
|
|
|
SPL |
63 |
|
|
|
_ _call() 68 |
|
|
|
|
_ _autoload() |
|
70 |
|
|
Further Reading |
71 |
|
3 Error Handling |
73 |
|
|
|
Handling Errors |
75 |
|
|
|
Displaying Errors |
76 |
|
||
Logging Errors |
77 |
|
||
Ignoring Errors |
78 |
|
||
Acting On Errors |
79 |
|
||
Handling External Errors |
80 |
|
||
Exceptions 83 |
|
|
|
|
Using Exception Hierarchies |
86 |
|||
A Typed Exceptions Example |
88 |
|||
Cascading Exceptions 94 |
|
|||
Handling Constructor Failure |
97 |
|||
Installing a Top-Level Exception Handler 98 |
||||
Data Validation |
100 |
|
||
When to Use Exceptions |
104 |
|
||
Further Reading |
105 |
|
|
Contents ix
4 Implementing with PHP: Templates and the Web 107
Smarty 108
Installing Smarty 109
Your First Smarty Template: Hello World! 110
Compiled Templates Under the Hood 111
Smarty Control Structures |
111 |
Smarty Functions and More |
114 |
Caching with Smarty 117 |
|
Advanced Smarty Features |
118 |
Writing Your Own Template Solution 120
Further Reading 121
5Implementing with PHP: Standalone Scripts 123
Introduction to the PHP Command-Line Interface (CLI) 125
Handling Input/Output (I/O) |
125 |
|
|
|
Parsing Command-Line Arguments |
128 |
|
||
Creating and Managing Child Processes |
130 |
|||
Closing Shared Resources |
131 |
|
||
Sharing Variables 132 |
|
|
|
|
Cleaning Up After Children |
132 |
|
||
Signals 134 |
|
|
|
|
Writing Daemons |
138 |
|
|
|
Changing the Working Directory |
140 |
|||
Giving Up Privileges 140 |
|
|
||
Guaranteeing Exclusivity |
141 |
|
||
Combining What You’ve Learned: Monitoring |
||||
Services 141 |
|
|
|
|
Further Reading |
150 |
|
|
|
6 Unit Testing |
153 |
|
An Introduction to Unit Testing |
154 |
|
Writing Unit Tests for Automated Unit |
||
Testing |
155 |
|
Writing Your First Unit Test |
155 |
|
Adding Multiple Tests 156 |
|