Advanced PHP Programming Advanced PHP Programming A practical guide to developing large-scale Web sites and applications with PHP 5 George Schlossnagle DEVELOPER’S LIBRARY Sams Publishing,800 East 96th Street,Indianapolis,Indiana 46240 USA Advanced PHP Programming Acquisitions Editor Copyright ©2004 by Sams Publishing Shelley Johnston All rights reserved.No part of this book shall be reproduced,stored Development Editor in a retrieval system,or transmitted by any means,electronic, Damon Jordan mechanical,photocopying,recording,or otherwise,without written Managing Editor permission from the publisher.No patent liability is assumed with Charlotte Clapp respect to the use of the information contained herein.Although every precaution has been taken in the preparation of this book,the Project Editor publisher and author assume no responsibility for errors or omis- Sheila Schroeder sions.Nor is any liability assumed for damages resulting from the use Copy Editor of the information contained herein. Kitty Jarrett International Standard Book Number:0-672-32561-6 Indexer Library of Congress Catalog Card Number:2003100478 Mandie Frank Printed in the United States of America Proofreader First Printing:March 2004 Paula Lowell 06 05 04 4 3 2 1 Technical Editors Brian France Trademarks Zak Greant All terms mentioned in this book that are known to be trademarks Sterling Hughes or service marks have been appropriately capitalized.Sams Publishing Coordinator Publishing cannot attest to the accuracy of this information.Use of a Vanessa Evans term in this book should not be regarded as affecting the validity of any trademark or service mark. Interior Designer Gary Adair Warning and Disclaimer Cover Designer Every effort has been made to make this book as complete and as Alan Clements accurate as possible,but no warranty or fitness is implied.The infor- Page Layout mation provided is on an “as is”basis.The author and the publisher Michelle Mitchell 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 [email protected] For sales outside of the U.S.,please contact International Sales 1-317-428-3341 [email protected] Contents v Contents at a Glance Introduction I Implementation and Development Methodologies 1 Coding Styles 2 Object-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 10 Data Component Caching 11 Computational Reuse III Distributed Applications 12 Interacting with Databases 13 User Authentication and Session Security 14 Session Handling 15 Building a Distributed Environment 16 RPC:Interacting with Remote Services vi Contents IV Performance 17 Application Benchmarks:Testing an Entire Application 18 Profiling 19 Synthetic Benchmarks:Evaluating Code Blocks and Functions V Extensibility 20 PHP and Zend Engine Internals 21 Extending PHP:Part I 22 Extending PHP:Part II 23 Writing SAPIs and Extending the Zend Engine Index Contents vii Table of Contents Introduction 1 I Implementation 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 2 Object-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 5 Implementing 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