■CONTENTSxiv
Giving Your Code Wings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Testing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
■CHAPTER 15 An Introduction to PEAR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
What Is PEAR? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Installing a Package with PEAR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
PEAR Channels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Using a PEAR Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Handling PEAR Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Creating Your Own PEAR Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
package.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Package Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
The contents Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Dependencies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Tweaking Installation with phprelease. . . . . . . . . . . . . . . . . . . . . . . . 345
Preparing a Package for Shipment. . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Setting Up Your Own Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
■CHAPTER 16 Generating Documentation with phpDocumentor . . . . . . . 353
Why Document? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Generating Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
DocBlock Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Documenting Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
File-Level Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Documenting Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Documenting Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Creating Links in Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
■CHAPTER 17 Version Control with CVS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Why Use Version Control? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Getting CVS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Configuring a CVS Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Creating a Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Configuring the Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Running CVS Across Multiple Machines . . . . . . . . . . . . . . . . . . . . . . 373
9098_FM.qxd 11/17/07 11:27 AM Page xiv