PHP Master: Write Cutting-Edge Code

PHP Master Write Cutting-Edge Code

Lorna Mitchell, Davey Shafik & Matthew Turland

Looking to really get into the nitty gritty?

Feel free to browse complete index from PHP Master Write Cutting-Edge Code . There isn't much we haven't covered.

The Index

Symbols

$_ (superglobal prefix), (HTTP Headers)
$_COOKIE variable, (The Attack)
$_GET variable, (HTTP Headers), (The Attack)
$_instance property, (Singleton)
$_POST variable, (HTTP Headers), (The Attack)
$_REQUEST variable, (The Attack)
$_SERVER variable, (HTTP Headers)
$_SERVER['HTTP_HOST'] variable, (Be Paranoid)
$_SERVER['PHP_SELF'] variable, (The Fix)
$_SERVER['REQUEST_URI'] variable, (The Controller)
$_SESSION variable, (The Attack)
-- (SQL comment), (The Attack)
-> (object operator), (Using Objects)
.htaccess file
enabling XHProf, (Installing XHProf)
/ (delimiter), (The Controller)
302 Found status code, (The HTTP Envelope)
: (placeholder indicator), (Parameters and Prepared Statements)
:: (scope resolution operator), (Using Static Properties and Methods)
; (header value delimiter), (Accept and Content-Type)
; (SQL delimiter), (Stored Procedures and PDO)
== (comparison operator), (Objects and References)
=== (comparison operator), (Objects and References)
? (placeholder), (Parameters and Prepared Statements)
@ (delimiter), (The Controller)
\ (namespace operator), (Objects and Namespaces)
_ (directory indicator), (Using PEAR Code)
_ (non-public indicator), (Using Getters and Setters to Control Visibility)
__ (magic indicator), (Class Constructors)
__autoload() method, (Autoloading), (Autoloading)
__call() method, (Using __call() and __callStatic()), (Commands)
__callStatic() method, (Using __call() and __callStatic())
__clone() method, (Passing Objects as Function Parameters), (More Magic Methods)
__construct() method, (Class Constructors), (More Magic Methods), (Singleton)
__destruct() method, (Class Constructors), (More Magic Methods)
__get() method, (Using Magic __get and __set Methods), (More Magic Methods)
__getFunctions() method, (Describing a SOAP Service with a WSDL)
__invoke() method, (Observer)
__set() method, (Using Magic __get and __set Methods), (More Magic Methods)
__sleep(), (Serializing Objects)
__toString method, (Printing Objects with __toString())
__wakeup(), (Serializing Objects)

A

ab (ApacheBench), (Benchmarking), (ab)
Accept header, (The HTTP Envelope), (Accept and Content-Type)
accept() method, (Iterator)
Accept-Charset header, (The Fix)
Accept-Encoding header, (The Fix)
Accept-Language header, (The Fix)
AcceptPathInfo configuration setting, (The Attack)
access modifiers (see visibility)
ADD INDEX statement, (MySQL Explain)
aggregate functions, (Aggregate Functions and Group By)
Ajax
about, (Ajax and Web Services)
cross-domain requests, (Cross-domain Requests)
onclick event, (Ajax and Web Services)
aliasing, of namespaces, (Objects and Namespaces)
allow_url_fopen, (PHP Streams)
ALTER TABLE statement, (MySQL Explain)
ApacheBench (ab), (Benchmarking), (ab)
APC caching, (APC)
APC extension, (Code Caching), (Installing XHGui)
APIs (Application Programming Interfaces), (APIs)
(see also specific APIs, e.g. HTTP, Ajax)
about, (APIs)
design considerations, (Designing a Web Service), (Design Patterns)
(see also design patterns)
documentation, (Designing a Web Service)
incorrect status codes in, (HTTP Status Codes)
JSON data format, (Working with JSON)
PHP internal, (Compiling Extensions by Hand)
security concerns, (Building an RPC Service)
service protocols, (Understanding and Choosing Service Types)
test-driven development and, (Writing Testable Code)
testing considerations, (Writing Testable Code)
XML data format, (Working with XML)
array_walk() method, (Working with Callbacks)
ArrayAccess, (ArrayAccess and ArrayObject)
ArrayObject, (ArrayAccess and ArrayObject)
arrays
array objects, (ArrayAccess and ArrayObject)
converting iterators to, (Functions)
creating data sets with, (Data Sets)
fixed-size, (Fixed-size Arrays)
iterating over, (Working with Callbacks), (Iterator)
returned by errorInfo(), (Handling Problems When Executing)
returned by fetch(), (Data Fetching Modes), (Handling Problems When Fetching)
serializing, (Serializing Objects)
setting placeholders with, (Parameters and Prepared Statements)
SimpleXMLElement vs, (Working with XML)
stacks/queues, (Stacks and Queues)
using JSON, (Working with JSON)
assert() function, (Writing Test Cases)
assert*() method, (Assertions)
assertEquals() method, (Writing Test Cases)
assertions
PHPUnit, (Writing Test Cases), (Assertions)
Selenium, (Assertions)
assertNot*() method, (Assertions)
asXML() method, (Working with XML)
attack vectors
about, (Security)
brute force, (Brute Force Attacks)
cross-site request forgery, (Cross-site Request Forgery)
cross-site scripting, (Cross-site Scripting)
packet sniffing, (SSL)
passwords, (Storing Passwords)
session fixation, (Session Fixation)
session hijacking, (Session Hijacking)
session prediction, (Session Fixation)
SQL Injection, (SQL Injection)
user data, (Be Paranoid)
authentication, of users, (The Fix), (The Fix)
auto_append_file, (Installing XHProf), (Debugging)
auto_prepend_file, (Installing XHProf), (Debugging)
__autoload() method, (Autoloading), (Autoloading)
autoloading
classes, (Autoloading)
controllers, (Routing the Requests)
exceptions, (Extending Exceptions)
stack-based, (Autoloading)
AVG, (Aggregate Functions and Group By)

B

backslash (\), (Objects and Namespaces)
Bazaar, (Distributed Version Control)
BDD (behavior-driven development), (Writing Testable Code)
beer, as reward, (Automated Deployment and Phing)
beginTransaction() method, (Transactions and PDO)
behavior-driven development (BDD), (Writing Testable Code)
benchmarking, (Benchmarking), (ab)
binding, (Binding Values and Variables to Prepared Statements), (Registry)
bindParam() method, (Binding Values and Variables to Prepared Statements)
bindValue() method, (Binding Values and Variables to Prepared Statements)
branch-per-feature, (Branch-per-feature)
branch-per-version, (Branch-per-version)
branching, (Designing Repository Structure), (Branch-per-version), (Branch-per-feature)
brute force attack, (Brute Force Attacks)
buffering, output, (HTTP Headers), (Routing the Requests)
build.xml file, (Automated Deployment and Phing)

C

Cache_Memcache class, (Memcached)
caching
about, (Caching)
APC, (APC)
disk, (Disk Cache)
memcached, (Memcached)
opcode, (Code Caching)
session data, (INI Settings)
call stack, (Installing XHProf)
__call() method, (Using __call() and __callStatic()), (Commands)
callbacks, (Working with Callbacks), (Observer), (Functions)
callgraph, (Installing XHProf)
__callStatic() method, (Using __call() and __callStatic())
CAPTCHA codes, (The Fix)
$captureScreenshotOnFailure flag, (Debugging)
changeset, (Distributed Version Control)
channel servers, (PEAR Channels), (Creating a Channel)
channel-info command, (PEAR Channels)
channel.xml file, (Creating a Channel)
Charles Proxy, (Inspecting HTTP Traffic)
checking out, (Working with Centralized Version Control)
class_implements(), (Functions)
class_parents(), (Functions)
classes
about, (Vocabulary of OOP)
autoloading, (Autoloading)
constructors, (Class Constructors), (Registry)
declaring, (Declaring a Class)
dependent, (Test Doubles)
getting parent, (Functions)
namespaces and, (Objects and Namespaces)
naming, (phpmd), (Using PEAR Code)
clone keyword, (Passing Objects as Function Parameters)
__clone() method, (Passing Objects as Function Parameters), (More Magic Methods)
cloning
objects, (Passing Objects as Function Parameters)
repositories, (Distributed Version Control), (Using Git for Source Control)
closures, (Working with Callbacks), (Observer)
code analysis
about, (Measuring Quality with Static Analysis Tools)
with phpcpd, (phpcpd)
with phploc, (phploc)
with phpmd, (phpmd)
code management (see source control)
code optimization (see profiling) (see XHProf)
code repository (see repositories)
code smells, (phpmd)
code sniffing (see PHP Code Sniffer)
coding standards
about, (Coding Standards)
checking with PHP Code Sniffer, (Checking Coding Standards with PHP Code Sniffer)
choosing, (PHP Code Sniffer Standards)
installing PHP Code Sniffer, (Checking Coding Standards with PHP Code Sniffer)
viewing violations, (Viewing Coding Standards Violations)
colon, double (::), (Using Static Properties and Methods)
colon, single (:), (Parameters and Prepared Statements)
comments, as documentation, (Documentation and Code)
comments, SQL (--), (The Attack)
commit() method, (Transactions and PDO)
committing changes
about, (Working with Centralized Version Control)
in distributed system, (Distributed Version Control)
in Git, (Using Git for Source Control)
resolving conflicts, (Using Subversion for Source Control)
in Subversion, (Using Subversion for Source Control)
communities, online, (Online Communities)
compare() method, (Heaps)
comparison operators, (Objects and References)
compiling, of PHP requests, (Code Caching)
conferences, (Attending Events)
__construct() method, (Class Constructors), (More Magic Methods), (Singleton)
constructors, (Class Constructors), (Registry), (phpmd)
contains() method, (Registry)
content negotiation, (Accept and Content-Type)
Content-Length header, (The HTTP Envelope)
Content-Type header, (The HTTP Envelope), (Accept and Content-Type)
$context parameter, (PHP Streams)
controllers, (The Controller), (Testing for Views and Controllers)
$_COOKIE variable, (The Attack)
cookies, (The Attack), (The Fix)
copy-on-write, (Objects and References)
COUNT, (Aggregate Functions and Group By)
count() method, (SPL Countable Interface Example), (Countable)
Countable interface, (SPL Countable Interface Example), (Countable)
CREATE PROCEDURE statement, (Stored Procedures and PDO)
CREATE TABLE command, (Creating the Tables)
create_stream_context() method, (PHP Streams)
cross-domain requests, (Ajax and Web Services), (Cross-domain Requests)
cross-site request forgery (CSRF), (Cross-site Request Forgery)
cross-site scripting (XSS), (Cross-site Scripting)
CRUD functionality, (Developing and Consuming RESTful Services)
CSRF (cross-site request forgery), (Cross-site Request Forgery)
CSS expressions, (Testing for Views and Controllers)
CSS selectors, (Locators)
CSV, for data sets, (Data Sets)
ctype extension, (Filtering and Validation)
cURL, (cURL), (PHP cURL Extension), (Consuming an RPC Service: Flickr Example)
curl_exec() method, (PHP cURL Extension)
curl_info() function, (PHP cURL Extension)
curl_init() method, (PHP cURL Extension)
curl_setopt() method, (PHP cURL Extension)
current() method, (Iterator)
cyclomatic complexity, (phploc)

D

data normalization, (Normalizing Data)
data sets
creating, (Data Sets)
ordering, (Heaps)
Data Source Name (DSN), (Connecting to MySQL with PDO)
data storage, (Persistent Data and Web Applications), (A Note on Data Storage)
data typing, (Type Hinting), (Catching Specific Types of Exception), (Working with XML)
Database extension, (Database Integration)
database tables
adding data, (Creating the Tables)
creating, (Creating the Tables)
deleting data, (Deleting Data)
inserting data, (Inserting a Row and Getting Its ID)
querying, (Selecting Data from a Table), (Parameters and Prepared Statements)
database testing
about, (Database Testing)
connecting with PHPUnit, (Connections)
creating data sets, (Data Sets)
writing test cases, (Database Test Cases), (Assertions), (Database Integration)
databases
change management, (Managing Database Changes)
connecting using Registry::set(), (Registry)
connecting with DB::getInstance(), (Singleton)
connecting with PDO, (Connecting to MySQL with PDO)
connecting with PHPUnit, (Connections)
optimizing performance, (Databases)
relational (see relational databases)
seeding, (Data Sets)
storing procedures, (Stored Procedures and PDO)
testing (see database testing)
types of, (Choosing How to Store Data)
Date header, (The HTTP Envelope)
date() function, (Working with XML)
DB adapter, (Installing XHGui)
$db_conn variable, (Connecting to MySQL with PDO)
debugging
inspecting traffic, (Inspecting HTTP Traffic)
logging errors, (Using Logging to Gather Information)
in Selenium, (Debugging)
SOAP, (PHP and SOAP)
trace option, (PHP and SOAP)
Xdebug, (Profiling), (Running Tests), (Compiling Extensions by Hand)
DELETE requests, (DELETEing Records)
DELETE statement, (Deleting Data)
delimiters, PDO vs SQL, (Stored Procedures and PDO)
dependencies, (PHP cURL Extension), (Dependency Injection), (Test Doubles), (Writing Testable Code), (Testing for Views and Controllers), (Database Testing)
dependency injection pattern, (Dependency Injection), (Writing Testable Code), (Testing for Views and Controllers)
deployment, automated
about, (Automated Deployment)
planning, (Automated Deployment and Phing)
using Phing, (Automated Deployment and Phing)
using symlink, (Instantly Switching to a New Version)
design patterns
about, (Design Patterns)
choosing, (Choosing the Right One)
dependency injection, (Dependency Injection), (Writing Testable Code), (Testing for Views and Controllers)
factory, (Factory)
iterator, (Iterator)
Model-View-Controller (see Model-View-Controller (MVC) design)
observer, (Observer)
proxy, (Iterator)
registry, (Registry)
singleton, (Singleton)
traits, (Traits)
__destruct() method, (Class Constructors), (More Magic Methods)
directory functions, (Working with Directories and Files)
DirectoryIterator class, (Working with Directories and Files)
disk caching, (Disk Cache)
distributed control, (Distributed Version Control), (Using Git for Source Control)
do-while loops, (Iterator)
documentation
generating from code, (Documentation and Code)
generating with phpDocumentor, (Using phpDocumentor)
importance of, (Designing a Web Service)
DOM extension, (Working with XML)
domain-specific language (DSL), (Writing Testable Code)
DomNodeList, (Iterator)
DSL (domain-specific language), (Writing Testable Code)
DSN (Data Source Name), (Connecting to MySQL with PDO)

E

echo(), (Printing Objects with __toString()), (Using Logging to Gather Information)
elePHPant, (Consuming an RPC Service: Flickr Example)
encapsulation, (Why OOP?)
encryption, password, (Storing Passwords)
equals, double (==), (Objects and References)
equals, triple (===), (Objects and References)
error codes, (Using Static Properties and Methods), (HTTP Status Codes)
error handling, (Exceptions)
(see also exceptions)
in APIs, (Designing a Web Service)
default PHP, (Setting a Global Exception Handler)
error logs, (Using Logging to Gather Information)
error_log(), (Using Logging to Gather Information)
errorInfo() method, (Handling Problems When Executing)
escaping characters, (Parameters and Prepared Statements), (The Controller), (Filter Input, Escape Output), (The Fix)
event handling, (Observer)
event triggers, (Observer)
Exception object, (Extending Exceptions)
exceptions
about, (Exceptions), (Why Exceptions?)
autoloading, (Extending Exceptions)
callbacks, (Working with Callbacks)
catching by type, (Catching Specific Types of Exception)
extending, (Extending Exceptions)
handling, (Handling Exceptions)
in PDO, (Dealing with Errors in PDO)
in PHPUnit, (Test Doubles)
setting default handling, (Setting a Global Exception Handler)
throwing, (Throwing Exceptions)
exec() method, (Transactions and PDO)
execute() method, (Parameters and Prepared Statements), (Handling Problems When Executing), (The Fix)
Expires header, (Memcached)
EXPLAIN command, (MySQL Explain)
explode() method, (GETting One Event or Many)
extends keyword, (Object Inheritance)
extensions
APC, (Code Caching), (Installing XHGui)
compiling, (Compiling Extensions by Hand)
ctype, (Filtering and Validation)
Database, (Database Integration)
DOM, (Working with XML)
installing, (Installing Extensions)
pecl_http (see PECL (PHP Extension Community Library))
Perl-Compatible Regular Expression (PCRE), (Filtering and Validation)
Selenium (see Selenium)
SimpleXML, (Working with XML)
Xdebug (see Xdebug)
XHProf (see XHProf)
zend (see Xdebug)

F

factory pattern, (Factory)
Fail2ban, (The Fix)
fetch() method, (Selecting Data from a Table), (Data Fetching Modes), (Handling Problems When Fetching)
fetch_style argument, (Data Fetching Modes)
fetchAll() method, (Data Fetching Modes)
FIEO (Filter Input, Escape Output), (Filter Input, Escape Output)
FIFO (First In, First Out), (Observer), (Stacks and Queues)
file functions, (Working with Directories and Files)
file naming conventions, (Declaring a Class), (Autoloading), (Writing Test Cases)
file_get_contents() method, (PHP Streams)
FileSystemIterator class, (Working with Directories and Files)
Filter Input, Escape Output (FIEO), (Filter Input, Escape Output)
filtering, (Iterator), (Filter Input, Escape Output)
FilterIterator class, (Iterator)
final keyword, (Test Doubles), (Writing Testable Code)
finally clause, (Handling Exceptions)
First In, First Out (FIFO), (Observer), (Stacks and Queues)
Flat XML, (Data Sets)
Flickr API, (Consuming an RPC Service: Flickr Example)
fluent interfaces, (Fluent Interfaces)
foreach loops, (Iterator)
foreign keys, (Foreign Keys)
forgery, of requests, (Cross-site Request Forgery)
forking, (Using Git for Source Control)
forums, (Online Communities)
FROM command, (Parameters and Prepared Statements)
functional tests, (Testing for Views and Controllers)
functions
anonymous, (Working with Callbacks), (Observer)
as callbacks, (Working with Callbacks)
specifying parameter types, (Type Hinting)
SPL utility, (Functions)

G

GET requests, (The HTTP Envelope), (HTTP Verbs), (Building an RPC Service), (The Fix)
$_GET variable, (HTTP Headers), (The Attack)
__get() method, (Using Magic __get and __set Methods), (More Magic Methods)
get() method, (Registry)
GETAction() method, (GETting One Event or Many)
getChildren(), (Iterator)
getConnection() method, (Connections)
getDataSet() method, (Data Sets)
__getFunctions() method, (Describing a SOAP Service with a WSDL)
getInstance() method, (Singleton), (Registry)
getLastRequest() method, (PHP and SOAP)
getLastRequestHeaders() method, (PHP and SOAP)
getLastResponse() method, (PHP and SOAP)
getLastResponseHeaders() method, (PHP and SOAP)
getMessage() method, (Handling Problems When Preparing)
getMock() method, (Test Doubles)
getter methods, (Using Getters and Setters to Control Visibility), (Dependency Injection)
Git, (Using Git for Source Control)
git log, (Using Git for Source Control)
git pull, (Using Git for Source Control)
git push, (Using Git for Source Control)
git remote, (Using Git for Source Control)
git status, (Using Git for Source Control)
GitHub, (Social Tools for Coding)
Google Groups, (Online Communities)
GROUP BY command, (Aggregate Functions and Group By)

H

handle() method, (PHP and SOAP)
hardening (code), (Service-oriented Architecture)
hasChildren(), (Iterator)
hash ID, (Functions)
hash_algos() function, (The Fix)
hash_hmac() function, (The Fix)
hashing, (The Fix), (Functions)
header() function, (HTTP Headers)
headers
about, (The HTTP Envelope)
Accept, (The HTTP Envelope), (Accept and Content-Type)
Accept-Charset, (The Fix)
Accept-Encoding, (The Fix)
Accept-Language, (The Fix)
as security tool, (The Fix)
Content-Length, (The HTTP Envelope)
Content-Type, (The HTTP Envelope), (Accept and Content-Type)
Date, (The HTTP Envelope)
Expires, (Memcached)
getting, (PHP cURL Extension)
getting/sending, (HTTP Headers)
Host, (The HTTP Envelope)
Last-Modified, (Memcached)
list of, (HTTP Headers)
Location, (The HTTP Envelope), (The Attack)
q values, (Accept and Content-Type)
REST and, (RESTful Principles)
Set-Cookie, (The HTTP Envelope)
User-Agent, (The HTTP Envelope), (The Fix)
heaps, (Heaps), (Priority Queues)
hijacking, session, (Session Hijacking)
HMAC value, (The Fix)
Host header, (The HTTP Envelope), (Be Paranoid)
.htaccess file
enabling mod_rewrite, (Using Rewrite Rules to Redirect to index.php)
HTML source dumping, (Debugging)
htmlentities() function, (The Fix)
HTTP requests
about, (HTTP: HyperText Transfer Protocol)
choosing response format, (Accept and Content-Type)
cURL, (cURL), (PHP cURL Extension), (Consuming an RPC Service: Flickr Example)
debugging, (Debugging HTTP)
forged, (Cross-site Request Forgery)
GET, (The HTTP Envelope), (HTTP Verbs), (Building an RPC Service), (The Fix)
headers, (The HTTP Envelope), (PHP cURL Extension), (HTTP Headers)
pecl_http PHP extension, (PHP pecl_http Extension)
PHP streams, (PHP Streams), (Collecting Incoming Data)
POST, (HTTP Verbs), (Building an RPC Service), (Creating Data with POST Requests), (The Fix)
redirecting, (Using Rewrite Rules to Redirect to index.php)
routing, (Routing the Requests)
simulating, (Brute Force Attacks)
status codes, (HTTP Status Codes)
HTTP traffic, inspecting, (Inspecting HTTP Traffic)
$httpTimeout property, (Assertions)
HyperText Transfer Protocol requests (see HTTP requests)

I

id attribute, (Locators)
implements keyword, (Declaring and Using an Interface)
inheritance, (Object Inheritance), (Polymorphism), (Registry)
(see also polymorphism)
INNER JOIN statement, (Inner Joins)
inner joins, (Inner Joins)
INSERT statement, (Creating the Tables), (Inserting a Row and Getting Its ID)
$_instance property, (Singleton)
instanceOf operator, (Polymorphism), (Identifying Objects and Interfaces)
instantiation
in factory pattern, (Factory)
of objects, (Vocabulary of OOP), (Instantiating an Object)
in registry pattern, (Registry)
in singleton pattern, (Singleton)
interfaces
about, (Interfaces)
Countable, (SPL Countable Interface Example)
declaring, (Declaring and Using an Interface)
identifiying, (Identifying Objects and Interfaces)
listing, (Functions)
__invoke() method, (Observer)
IRC (Internet Relay Chat), (Online Communities)
Iterator class, (Iterator)
iterator pattern, (Iterator)
iterator_apply(), (Functions)
iterator_count(), (Functions)
iterator_to_array(), (Functions)
IteratorAggregate class, (Iterator)
iterators, (Working with Directories and Files), (Functions)

J

JavaScript Object Notation (JSON), (Working with JSON), (Memcached)
JMeter, (Benchmarking)
Jones, Paul, (Load Testing)
JSON (JavaScript Object Notation), (Working with JSON), (Memcached)
json_decode() function, (Working with JSON), (Collecting Incoming Data)
json_encode() function, (Working with JSON)

K

Keep It Simple, Stupid, (Designing a Web Service)
:key placeholder, (The Controller)
key() method, (Iterator)
keys
foreign, (Foreign Keys)
primary, (Creating the Tables), (Primary Keys and Indexes)
KISS principle, (Designing a Web Service)

L

lambdas, (Working with Callbacks)
Last In, First Out (LIFO), (Stacks and Queues)
Last-Modified header, (Memcached)
lastInsertId() method, (Inserting a Row and Getting Its ID)
late static binding, (Registry)
lazy loading, (Singleton), (Registry)
LIFO (Last In, First Out), (Stacks and Queues)
LIMIT clause, (Iterator)
LimitIterator class, (Iterator)
line break indicator (PHP_EOL), (Iterator)
linking tables, (Handling Many-to-Many Relationships)
lists, (Lists)
load testing
about, (Load Testing)
with ab, (ab)
with Siege, (Siege)
Location header, (The HTTP Envelope), (The Attack)
locators, Selenium, (Locators)
log files, (Using Logging to Gather Information)
login attempts, limiting, (The Fix)
loops, (Iterator)

M

magic methods, (Class Constructors), (More Magic Methods)
(see also all methods beginning with __)
magic quotes, (Filter Input, Escape Output)
many-to-many relationships, (Handling Many-to-Many Relationships)
matchers, (Test Doubles)
MD5 algorithm, (The Fix)
md5() function, (The Fix)
memcached, (INI Settings), (Databases), (Memcached)
Mercurial, (Distributed Version Control)
meta-packages, (Now What?)
methods
about, (Vocabulary of OOP)
chaining together, (Fluent Interfaces)
declaring, (Declaring a Class)
magic, (More Magic Methods)
magic (__), (Class Constructors)
non-existent, (Using __call() and __callStatic())
redeclaring, (Object Inheritance)
specifying parameter types, (Type Hinting)
static, (Using Static Properties and Methods), (Registry)
test double, (Test Doubles)
visibility (see visibility)
mocking, (Test Doubles)
mod_rewrite, (The Controller)
Model-View-Controller (MVC) design (see MVC (Model-View-Controller) design)
models, (The Model)
MultipleIterator class, (Iterator)
MVC (Model-View-Controller) design
about, (Autoloading), (Service-oriented Architecture), (Model-View-Controller)
controller component, (The Controller)
model component, (The Model)
REST and, (Routing the Requests)
testing, (Testing for Views and Controllers)
view component, (The View)
MySQL
ADD INDEX, (MySQL Explain)
ALTER TABLE, (MySQL Explain)
AVG, (Aggregate Functions and Group By)
connecting with PDO, (Connecting to MySQL with PDO)
COUNT, (Aggregate Functions and Group By)
CREATE PROCEDURE, (Stored Procedures and PDO)
CREATE TABLE, (Creating the Tables)
DELETE, (Deleting Data)
delimiters, (Stored Procedures and PDO)
error codes, (Handling Problems When Executing)
EXPLAIN, (MySQL Explain)
FROM, (Parameters and Prepared Statements)
GROUP BY, (Aggregate Functions and Group By)
INNER JOIN, (Inner Joins)
INSERT, (Creating the Tables), (Inserting a Row and Getting Its ID)
LIMIT, (Iterator)
MAX/MIN, (Aggregate Functions and Group By)
optimizing queries, (Databases)
ORDER BY, (Selecting Data from a Table)
query binding, (Binding Values and Variables to Prepared Statements)
RIGHT and LEFT JOIN, (Outer Joins)
SELECT, (Selecting Data from a Table), (MySQL Explain)
SUM, (Aggregate Functions and Group By)
UPDATE, (How many rows were inserted, updated, or deleted?)
WHERE, (Parameters and Prepared Statements)
MySQL XML, (Data Sets)
mysql_escape_string() method, (Parameters and Prepared Statements)

N

name attribute, (Locators)
namespace operator, (Objects and Namespaces)
namespaces, (Using Static Properties and Methods), (Objects and Namespaces)
naming conventions
classes, (phpmd), (Using PEAR Code)
constructors, (phpmd)
PEAR, (Writing Test Cases), (Running Tests), (Using PEAR Code)
variables, (phpmd)
new keyword, (Instantiating an Object)
new operator, (Factory)
next() method, (Iterator)
normalization, (Normalizing Data)
NoSQL, (Choosing How to Store Data), (Databases)

O

ob_flush() function, (HTTP Headers)
ob_start() method, (HTTP Headers)
object operator (->), (Using Objects)
object-oriented programming (OOP), (Why OOP?)
objects
about, (Vocabulary of OOP)
accessing properties, (Using Objects)
calling methods, (Using Objects)
cloning, (Passing Objects as Function Parameters)
comparing, (Objects and References)
fluent interfaces, (Fluent Interfaces)
as function parameters, (Passing Objects as Function Parameters)
inheritance, (Object Inheritance)
inspecting, (Instantiating an Object)
instantiating, (Vocabulary of OOP), (Instantiating an Object), (Singleton), (Registry), (Factory)
namespaces and, (Objects and Namespaces)
polymorphism, (Polymorphism)
printing, (Printing Objects with __toString())
as references, (Objects and References)
serializing, (Serializing Objects)
type hinting, (Type Hinting), (Catching Specific Types of Exception)
observer pattern, (Observer)
one-to-many relationship, (Building a Recipe Website with MySQL), (Designing Databases), (Foreign Keys)
online communities, (Online Communities)
opcode caching, (Code Caching)
open source projects, (Open Source Projects)
ORDER BY statement, (Selecting Data from a Table)
outer joins, (Outer Joins)
OuterIterator class, (Iterator)
output
buffering, (HTTP Headers), (Routing the Requests)
formatting, (Building an RPC Service)

P

packages
creating, (Creating Packages)
installing, (Installing Packages)
serving over channel, (Creating a Channel)
versioning, (Package Versioning)
packet sniffing, (SSL)
page source, dumping, (Debugging)
parameters, typing, (Type Hinting)
partitions, (Memcached)
passwords, encrypting, (Storing Passwords)
PCRE (Perl-Compatible Regular Expression) extension, (Filtering and Validation)
PDO (PHP Data Object)
about, (Databases), (PHP Database Objects)
binding to statements, (Binding Values and Variables to Prepared Statements)
connecting to MySQL, (Connecting to MySQL with PDO)
counting affected rows, (How many rows were inserted, updated, or deleted?), (Transactions and PDO)
deleting data, (Deleting Data)
escaping values, (Parameters and Prepared Statements)
handling exceptions, (Dealing with Errors in PDO)
inserting data, (Inserting a Row and Getting Its ID)
retrieving data, (Selecting Data from a Table)
sorting data, (Selecting Data from a Table)
storing procedures, (Stored Procedures and PDO)
transactions, (Transactions and PDO)
using prepared statements, (Parameters and Prepared Statements)
PDO::FETCH_ASSOC, (Data Fetching Modes)
PDO::FETCH_BOTH, (Data Fetching Modes)
PDO::FETCH_CLASS, (Data Fetching Modes)
PDO::FETCH_NUM, (Data Fetching Modes)
PDO::query() method, (Selecting Data from a Table), (Parameters and Prepared Statements)
PDOException, (Connecting to MySQL with PDO)
PDOStatement, (Iterator)
PEAR
about, (What is PEAR?)
channel servers, (PEAR Channels), (Creating a Channel)
compiling extensions, (Compiling Extensions by Hand)
creating packages, (Creating Packages)
installing extensions, (Installing Extensions)
installing packages, (Installing Packages)
naming conventions, (Writing Test Cases), (Running Tests), (Using PEAR Code)
other features, (Now What?)
package versioning, (Package Versioning)
PECL and, (What is PECL?)
PHP Code Sniffer, (Checking Coding Standards with PHP Code Sniffer)
phpDocumentor, (Using phpDocumentor)
using PEAR code, (Using PEAR Code)
pear command, (What is PEAR?)
pear package command, (Creating Packages)
PEAR_PackageFileManager2, (Creating Packages)
PECL (PHP Extension Community Library)
APC extension, (Code Caching), (Installing XHGui)
compiling extensions, (Compiling Extensions by Hand)
installing extensions, (Installing Extensions)
PEAR and, (What is PECL?)
pecl_http extension, (PHP pecl_http Extension)
XHProf extension (see XHProf)
pecl command, (What is PEAR?), (Installing Extensions)
pecl_http extension, (PHP pecl_http Extension)
performance optimization
APC caching, (APC)
for databases, (Databases)
disk caching, (Disk Cache)
memcached, (Memcached)
opcode caching, (Code Caching)
session data caching, (INI Settings)
performance testing, (Benchmarking)
Perl-Compatible Regular Expression (PCRE) extension, (Filtering and Validation)
Phing, (Automated Deployment and Phing)
PHP 4, vs PHP5, (Class Constructors), (Using Getters and Setters to Control Visibility)
PHP Code Sniffer
installing, (Checking Coding Standards with PHP Code Sniffer)
running, (Checking Coding Standards with PHP Code Sniffer)
standards available, (PHP Code Sniffer Standards)
viewing violations, (Viewing Coding Standards Violations)
PHP Extension and Application Repository (PEAR) (see PEAR)
PHP Extension Community Library (PECL) (see PECL (PHP Extension Community Library))
PHP life cycle, (Code Caching)
PHP streams, (PHP Streams), (Collecting Incoming Data)
php.ini file
automatically including code, (Installing XHProf), (Debugging)
configuring session options, (The Fix)
enabling APC extension, (Code Caching)
enabling streams, (PHP Streams)
enabling XHProf, (Installing XHProf)
memcache setting, (INI Settings)
PHP4, vs PHP5, (Using Static Properties and Methods), (phpmd)
PHP_EOL, (Iterator)
phpcpd (PHP Copy Paste detector), (phpcpd)
PHPDeveloper, (Keep Reading)
phpDocumentor, (Using phpDocumentor)
phploc (PHP Lines of Code), (phploc)
phpmd (PHP Project Mess Detector), (phpmd)
PHPSESSID parameter, (The Fix)
PHPUnit
about, (Unit Testing)
configuring, (Running Tests)
connecting to database, (Connections)
creating data sets, (Data Sets)
CSS expressions, (Testing for Views and Controllers)
installing, (Installing PHPUnit)
output file, (Running Tests)
running test cases, (Running Tests)
Selenium extension (see Selenium)
test doubles, (Test Doubles)
writing database test cases, (Database Test Cases), (Assertions)
writing testable code, (Writing Testable Code)
writing unit test cases, (Writing Test Cases)
XPath expressions, (Testing for Views and Controllers)
phpunit.xml file, (Running Tests)
Pirum, (Creating a Channel)
pirum.xml file, (Creating a Channel)
placeholders, (Parameters and Prepared Statements), (The Controller)
Planet PHP, (Keep Reading)
polymorphism, (Polymorphism), (Identifying Objects and Interfaces)
POST requests, (HTTP Verbs), (Building an RPC Service), (Creating Data with POST Requests), (The Fix)
$_POST variable, (HTTP Headers), (The Attack)
prepare() method, (Parameters and Prepared Statements), (Handling Problems When Preparing), (The Fix)
prepared statements, (Parameters and Prepared Statements), (The Fix)
primary keys, (Creating the Tables), (Primary Keys and Indexes)
print_r(), (Using Logging to Gather Information), (Consuming an RPC Service: Flickr Example)
private keyword, (private), (Singleton), (Test Doubles), (Writing Testable Code)
procedures, storing, (Stored Procedures and PDO)
profiling, (Profiling)
(see also XHProf)
progressive enhancement, (Ajax and Web Services)
properties
about, (Vocabulary of OOP)
in cloned objects, (Passing Objects as Function Parameters)
non-existent, (Using Magic __get and __set Methods)
static, (Using Static Properties and Methods)
protected keyword, (protected)
proxy pattern, (Iterator)
public keyword, (public)
PUT requests, (Updating Resources with PUT)

Q

q value, in headers, (Accept and Content-Type)
queries (see MySQL)
question mark (?), (Parameters and Prepared Statements)
queues, (Stacks and Queues), (Priority Queues)

R

rainbow tables, (The Fix)
rand() function, (Catching Specific Types of Exception)
readEvents() function, (A Note on Data Storage)
reCAPTCHA, (The Fix)
recursion, (Iterator)
RecursiveArrayIterator class, (Iterator)
RecursiveDirectoryIterator class, (Working with Directories and Files)
RecursiveIterator class, (Iterator)
RecursiveIteratorIterator class, (Iterator), (Working with Directories and Files)
redeclaring, (Object Inheritance)
references, (Objects and References)
RegexIterator class, (Iterator)
registry pattern, (Registry)
regular expressions, (Iterator), (Filtering and Validation)
relational databases
aggregate functions, (Aggregate Functions and Group By)
foreign keys, (Foreign Keys)
grouping data, (Aggregate Functions and Group By)
indexing, (Primary Keys and Indexes), (MySQL Explain)
inner joins, (Inner Joins)
many-to-many relationships, (Handling Many-to-Many Relationships)
normalizing data, (Normalizing Data)
one-to-many relationships, (Building a Recipe Website with MySQL), (Designing Databases), (Foreign Keys)
optimizing performance, (Databases)
outer joins, (Outer Joins)
primary keys, (Primary Keys and Indexes)
Release Candidate, (Package Versioning)
Remote Procedure Call (RPC) services (see RPC services)
remote-info command, (PEAR Channels)
remotes, (Using Git for Source Control)
repositories
about, (Working with Centralized Version Control)
cloning, (Distributed Version Control), (Using Git for Source Control)
designing, (Designing Repository Structure), (Branch-per-version), (Branch-per-feature)
distributed, (Distributed Version Control)
working copies, (Working with Centralized Version Control)
Request object, (Collecting Incoming Data)
$_REQUEST variable, (The Attack)
REQUEST_FILENAME variable, (The Controller)
requests
HTTP (see HTTP requests)
PHP, (Code Caching)
require, (Instantiating an Object)
reset() method, (Iterator)
resources, REST, (Beyond Pretty URLs), (RESTful Principles)
REST
about, (Understanding and Choosing Service Types), (Developing and Consuming RESTful Services)
collecting data, (Collecting Incoming Data)
creating data, (Creating Data with POST Requests)
deleting data, (DELETEing Records)
getting events, (GETting One Event or Many)
limitations of, (Updating Resources with PUT)
MVC and, (Routing the Requests)
principles of, (RESTful Principles)
resources, (Beyond Pretty URLs), (RESTful Principles)
rewriting requests, (Using Rewrite Rules to Redirect to index.php)
routing requests, (Routing the Requests)
storing data, (A Note on Data Storage)
updating data, (Updating Resources with PUT)
URL usage, (Beyond Pretty URLs)
rewind() method, (Iterator)
RewriteCond, (The Controller)
RIGHT JOIN statement, (Outer Joins)
rollback, (Managing Database Changes)
rollback() method, (Transactions and PDO)
rowCount() method, (How many rows were inserted, updated, or deleted?)
RPC services
about, (Understanding and Choosing Service Types), (RPC Services)
building, (Building an RPC Service)
consuming, (Consuming an RPC Service: Flickr Example)
runGiven() method, (Writing Testable Code)
runThen() method, (Writing Testable Code)
runWhen() method, (Writing Testable Code)

S

salting, (The Fix)
Same Origin Policy, (Ajax and Web Services), (Cross-domain Requests)
sanitization, (Filtering and Validation)
scalar values, (Test Doubles)
Schlitt, Tobias, (Locators)
scope resolution operator (::), (Using Static Properties and Methods)
$screenshotPath, (Debugging)
screenshots, as debug tool, (Debugging)
secure socket layers (SSL), (The Fix)
security
for APIs, (Building an RPC Service)
attack vectors (see attack vectors)
escaping output, (The Fix)
filtering input, (Filter Input, Escape Output)
GET issues, (The Fix)
Same Origin Policy, (Ajax and Web Services), (Cross-domain Requests)
of user data, (Be Paranoid)
wireless network issues, (SSL)
SELECT statement, (Selecting Data from a Table), (MySQL Explain)
Selenium
about, (Systems Testing)
assertions, (Assertions)
automating test writing, (Automating Writing Tests)
commands, (Commands)
database integration, (Database Integration)
debugging tools, (Debugging)
locators, (Locators)
setup, (Initial Setup)
Selenium IDE, (Automating Writing Tests)
semicolon (;), (Stored Procedures and PDO), (Accept and Content-Type)
serializing, (Serializing Objects)
$_SERVER variable, (HTTP Headers)
$_SERVER['HTTP_HOST'] variable, (Be Paranoid)
$_SERVER['PHP_SELF'] variable, (The Fix)
$_SERVER['REQUEST_URI'] variable, (The Controller)
service-oriented architecture (SOA), (Service-oriented Architecture)
session data, caching, (INI Settings)
session fixation, (Session Fixation)
session hijacking, (Session Hijacking)
session prediction, (Session Fixation)
$_SESSION variable, (The Attack)
session.cookie_httponly, (The Fix)
session.name, (The Fix)
session.use_cookies, (The Fix)
session.use_only_cookies, (The Fix)
session.use_trans_sid, (The Fix)
session_regenerate_id() function, (The Fix)
__set() method, (Using Magic __get and __set Methods), (More Magic Methods)
set() method, (Registry)
Set-Cookie header, (The HTTP Envelope)
set_error_handler() method, (Setting a Global Exception Handler)
set_exception_handler() method, (Setting a Global Exception Handler)
setHttpTimeout() method, (Assertions)
setNotes() function, (Creating Packages)
setPackage() function, (Creating Packages)
setReleaseStability() function, (Creating Packages)
setReleaseVersion() function, (Creating Packages)
setter methods, (Using Getters and Setters to Control Visibility), (Dependency Injection)
setUp() method, (Writing Test Cases), (Assertions)
SHA-1 algorithm, (The Fix)
SHA-256 algorithm, (The Fix)
shallow copies, (Passing Objects as Function Parameters)
Siege, (Siege)
SimpleXML extension, (Working with XML)
simplexml_load_file() function, (Working with XML)
simplexml_load_string() function, (Working with XML)
SimpleXMLElement, (Working with XML), (Consuming an RPC Service: Flickr Example), (Iterator)
singleton pattern, (Singleton)
sizeof() method, (Countable)
__sleep(), (Serializing Objects)
SOA (service-oriented architecture), (Service-oriented Architecture)
SOAP
about, (Understanding and Choosing Service Types), (RPC Services)
debugging options, (PHP and SOAP)
describing with WSDL, (Describing a SOAP Service with a WSDL)
implementing in PHP, (PHP and SOAP)
SoapClient class, (PHP and SOAP), (Describing a SOAP Service with a WSDL)
SoapServer class, (PHP and SOAP)
source control
about, (Source Control)
components of, (Working with Centralized Version Control)
for databases, (Managing Database Changes)
distributed, (Distributed Version Control)
repository structure, (Designing Repository Structure)
resolving conflicts, (Using Subversion for Source Control)
social, (Social Tools for Coding)
using Git, (Using Git for Source Control)
using Subversion, (Using Subversion for Source Control)
specifications, BDD, (Writing Testable Code)
SPL (Standard PHP Library)
about, (Counting Objects), (SPL: The Standard PHP Library)
array objects, (ArrayAccess and ArrayObject), (Fixed-size Arrays)
autoloading, (Autoloading)
Countable interface, (SPL Countable Interface Example), (Countable)
directory functions, (Working with Directories and Files)
file functions, (Working with Directories and Files)
heaps, (Heaps), (Priority Queues)
lists, (Lists)
queues, (Stacks and Queues), (Priority Queues)
stacks, (Autoloading), (Stacks and Queues)
utility functions, (Functions)
spl_object_hash(), (Functions)
SplDoublyLinkedList, (Lists)
SplFileInfo class, (Working with Directories and Files)
SplFileObject, (Working with Directories and Files)
SplFixedArray, (Fixed-size Arrays)
SplHeap class, (Heaps)
SplPriorityQueue class, (Priority Queues)
SplQueue class, (Stacks and Queues)
SplStack class, (Stacks and Queues)
SplTempFileObject, (Working with Directories and Files)
sprintf(), (The View)
SQL Injection, (SQL Injection)
SQLSTATE codes, (Handling Problems When Executing)
SSL (secure socket layers), (The Fix)
stability markers, (Installing Packages), (Package Versioning)
Stack Overflow forum, (Online Communities)
stacks, (Autoloading), (Stacks and Queues)
Standard PHP Library (SPL) (see SPL (Standard PHP Library))
statelessness, (Persistent Data and Web Applications), (RESTful Principles)
static analysis
about, (Measuring Quality with Static Analysis Tools)
with phpcpd, (phpcpd)
with phploc, (phploc)
with phpmd, (phpmd)
static keyword, (Using Static Properties and Methods), (Test Doubles), (Writing Testable Code)
static methods, (Using Static Properties and Methods)
static properties, (Using Static Properties and Methods)
status codes, (HTTP Status Codes)
stress testing, (Benchmarking)
stubbing, (Test Doubles), (Writing Testable Code)
Subversion
commands, (Using Subversion for Source Control)
repository design, (Designing Repository Structure)
resolving conflicts, (Using Subversion for Source Control)
SUM, (Aggregate Functions and Group By)
superglobals ($_), (HTTP Headers)
symlink, (Installing XHGui), (Instantly Switching to a New Version)
systems testing
about, (Systems Testing)
database integration, (Database Integration)
debugging, (Debugging)
Selenium assertions, (Assertions)
Selenium commands, (Commands)
Selenium locators, (Locators)
Selenium setup, (Initial Setup)
with automating test writing, (Automating Writing Tests)

T

T_PAAMAYIM_NEKUDOTAYIM error, (Using Static Properties and Methods)
tags, in repository, (Designing Repository Structure)
tar command, (Compiling Extensions by Hand)
tcpdump, (Inspecting HTTP Traffic)
TDD (test-driven development), (Writing Testable Code)
tearDown() method, (Writing Test Cases), (Assertions)
test cases
BDD specifications, (Writing Testable Code)
for databases, (Database Test Cases), (Assertions), (Database Integration)
running, (Running Tests)
writing, (Writing Test Cases)
test doubles, (Test Doubles)
test() method, (Writing Test Cases)
test-driven development (TDD), (Writing Testable Code)
testing
benchmarking, (Benchmarking)
coding considerations, (Writing Testable Code)
databases (see database testing)
load (see load testing)
singleton problems, (Problems with Singletons)
systems (see systems testing)
unit (see unit testing)
text files, serialized, (A Note on Data Storage)
$this variable, (Declaring a Class), (Using Static Properties and Methods)
threads, (Benchmarking)
throw keyword, (Throwing Exceptions)
__toString method, (Printing Objects with __toString())
trace option, (PHP and SOAP)
traffic, inspecting, (Inspecting HTTP Traffic)
trait keyword, (Traits)
traits, (Traits)
transactions, (Transactions and PDO)
triggers, (Observer)
trunk, in repository, (Designing Repository Structure)
try-catch blocks, (Handling Exceptions), (Catching Specific Types of Exception)
type hinting, (Type Hinting), (Catching Specific Types of Exception)
type:key placeholder, (The Controller)
typecasting, (Working with XML)

U

Unconferences, (Attending Events)
underscore, double (__), (Class Constructors)
underscore, single (_), (Using PEAR Code)
Unified Modeling Language (UML), (Object Inheritance)
unit testing
about, (Unit Testing)
functional vs., (Testing for Views and Controllers)
MVC components, (Testing for Views and Controllers)
of dependent classes, (Test Doubles)
running test cases, (Running Tests)
writing test cases, (Writing Test Cases)
writing testable code, (Writing Testable Code)
unset() method, (Registry)
UPDATE statement, (How many rows were inserted, updated, or deleted?)
URL collections, (Beyond Pretty URLs)
url_rewriter.tags, (The Fix)
URLs
in REST, (Beyond Pretty URLs)
rewriting, (The Controller), (The Fix)
use keyword, (Traits)
use operator, (Objects and Namespaces)
user authentication, (The Fix), (The Fix)
user groups, (User Groups)
User-Agent header, (The HTTP Envelope), (The Fix)

V

valid() method, (Iterator)
validation, (Filtering and Validation)
var_dump() method, (Instantiating an Object)
variables, naming, (phpmd)
version control
for code (see source control)
for PEAR packages, (Package Versioning)
views, (The View), (Testing for Views and Controllers)
Virtual conferences, (Attending Events)
visibility
choosing, (Choosing the Right Visibility)
level of, (public, private, and protected)
using __get/__set, (Using Magic __get and __set Methods)
using getter/setter, (Using Getters and Setters to Control Visibility)

W

waitFor*() method, (Assertions)
waitForNot*() method, (Assertions)
__wakeup(), (Serializing Objects)
Web Service Description Language (WSDL), (Understanding and Choosing Service Types), (Describing a SOAP Service with a WSDL)
web services, (Before You Begin), (Designing a Web Service)
(see also APIs (Application Programming Interfaces))
Westhoff, Jakob, (Locators)
WHERE command, (Parameters and Prepared Statements)
wireless networks, (SSL)
Wireshark, (Inspecting HTTP Traffic)
working copy, (Working with Centralized Version Control)
writeEvents() function, (A Note on Data Storage)
WSDL (Web Service Description Language), (Understanding and Choosing Service Types), (Describing a SOAP Service with a WSDL)

X

Xdebug, (Profiling), (Running Tests), (Compiling Extensions by Hand)
XHGui
comparing test runs, (Installing XHGui)
enabling APC cache, (Installing XHGui)
installing interface, (Installing XHGui)
results page, (Installing XHGui)
setting a profile, (Installing XHGui)
XHProf
about, (Profiling)
call stack, (Installing XHProf)
comparing test runs, (Installing XHGui)
enabling APC cache, (Installing XHGui)
installing, (Installing XHProf)
installing XHGui interface, (Installing XHGui)
running, (Installing XHProf)
setting XHGui profile, (Installing XHGui)
user interface, (Installing XHProf)
XHGui results page, (Installing XHGui)
XML
as API data format, (Working with XML), (Iterator)
creating data sets with, (Data Sets)
datasets, (Data Sets)
loading to a stack, (Stacks and Queues)
locating elements, (Locators)
Phing config file, (Automated Deployment and Phing)
YAML, (Data Sets)
XPath expressions, (Testing for Views and Controllers), (Locators)
XSS (cross-site scripting), (Cross-site Scripting)

Y

YAML, (Data Sets)

Z

zend_extensions, (Compiling Extensions by Hand)

Only$39.95(Print)

PHP Master: Write Cutting-Edge Code

Add to Cart

Author Notes

This book is everything I wish I'd had when making that step from “can hack code” to “software engineer”…

lorna-thumbnail Lorna Mitchell Author LornaJane.net

Customer Reviews

Live, unmoderated reviews from our customers, typos and all.
Gravatar

Great content - strteched me to start with - but that's whatI was seeking.

chris davis, USA 5 stars
26 May 2012

Gravatar

WOW A lot of information.
Had the book for 3 weeks now and still going through it.
It will make a reference tool as well

Eugene Basciuk, USA 5 stars

Gravatar

Very comprehensive book. Touches alot of interesting and helpful areas. Takes your skills to the next level.

jochen hartz, USA 5 stars

Reviews:
See More Reviews or Write Your Own

The contents of this web page are copyright © 1998–2012 SitePoint Pty. Ltd. All Rights Reserved.