Search for notes by fellow students, in your own course and all over the country.
Browse our notes for titles which look like what you need, you can preview any of the notes via a sample of the contents. After you're happy these are the notes you're after simply pop them into your shopping cart.
Title: Learning PHP JAVA SCRIPT And SQL
Description: Step By Step Guide To Creating A Dynamic Websites with PHP Language.PHP Function and objects. Introduction about SQL and how to use SQL Database.How to Explore the javascript and how to use html Text in Java Script.Programig in PHP Language.
Description: Step By Step Guide To Creating A Dynamic Websites with PHP Language.PHP Function and objects. Introduction about SQL and how to use SQL Database.How to Explore the javascript and how to use html Text in Java Script.Programig in PHP Language.
Document Preview
Extracts from the notes are below, to see the PDF you'll receive please use the links above
Download at Boykma
...
it-ebooks
...
Com
Learning PHP, MySQL, and
JavaScript
Robin Nixon
Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo
www
...
info
Download at Boykma
...
All rights reserved
...
Published by O’Reilly Media, Inc
...
O’Reilly books may be purchased for educational, business, or sales promotional use
...
safaribooksonline
...
For more information, contact our
corporate/institutional sales department: (800) 998-9938 or corporate@oreilly
...
Editor: Andy Oram
Production Editor: Sumita Mukherji
Copyeditor: Nancy Kotary
Proofreader: Kiel Van Horn
Indexer: Ellen Troutman Zaig
Cover Designer: Karen Montgomery
Interior Designer: David Futato
Illustrator: Robert Romano
Printing History:
July 2009:
First Edition
...
Learning PHP, MySQL, and JavaScript, the image of sugar gliders, and related trade
dress are trademarks of O’Reilly Media, Inc
...
Where those designations appear in this book, and O’Reilly Media, Inc
...
While every precaution has been taken in the preparation of this book, the publisher and author assume
no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein
...
ISBN: 978-0-596-15713-5
[M]
1246467361
www
...
info
Download at Boykma
...
xiii
1
...
1
HTTP and HTML: Berners-Lee’s Basics
The Request/Response Procedure
The Benefits of PHP, MySQL, and JavaScript
Using PHP
Using MySQL
Using JavaScript
The Apache Web Server
About Open Source
Bringing It All Together
Test Your Knowledge: Questions
2
2
5
5
6
7
8
9
9
11
2
...
13
What Is a WAMP, MAMP, or LAMP?
Installing a WAMP on Windows
Overcoming Installation Problems
Testing the Installation
Alternative WAMPs
Installing a MAMP on Mac OS X
Some Final Tweaking
Other Alternatives
Installing a LAMP on Linux
Working Remotely
Logging In
Using FTP
Using a Program Editor
Using an IDE
Test Your Knowledge: Questions
13
14
14
16
18
19
24
25
25
26
27
27
28
30
32
iii
www
...
info
Download at Boykma
...
Introduction to PHP
...
Expressions and Control Flow in PHP
...
while Loops
for Loops
Breaking Out of a Loop
The continue Statement
Implicit and Explicit Casting
PHP Dynamic Linking
Dynamic Linking in Action
Test Your Knowledge: Questions
iv | Table of Contents
61
62
63
64
66
67
70
71
72
73
74
77
78
78
80
81
83
84
84
85
86
87
www
...
info
Download at Boykma
...
PHP Functions and Objects
...
PHP Arrays
...
as Loop
Multidimensional Arrays
Using Array Functions
is_array()
count()
sort()
shuffle()
explode()
extract()
compact()
reset()
end()
115
115
117
118
119
121
123
123
124
124
124
125
125
126
127
128
Table of Contents | v
www
...
info
Download at Boykma
...
Practical PHP
...
01 Document Types
XHTML 1
...
Introduction to MySQL
...
it-ebooks
...
Com
Using Logical Operators
MySQL Functions
Accessing MySQL via phpMyAdmin
Windows Users
Mac OS X Users
Linux Users
Using phpMyAdmin
Test Your Knowledge: Questions
194
194
195
195
195
195
197
198
9
...
201
Database Design
Primary Keys: The Keys to Relational Databases
Normalization
First Normal Form
Second Normal Form
Third Normal Form
When Not to Use Normalization
Relationships
One-to-One
One-to-Many
Many-to-Many
Databases and Anonymity
Transactions
Transaction Storage Engines
Using BEGIN
Using COMMIT
Using ROLLBACK
Using EXPLAIN
Backing Up and Restoring
Using mysqldump
Creating a Backup File
Restoring from a Backup File
Dumping Data in CSV Format
Planning Your Backups
Test Your Knowledge: Questions
201
202
203
204
206
208
210
211
211
212
212
214
214
215
216
216
216
217
218
219
220
222
222
223
223
10
...
225
Querying a MySQL Database with PHP
The Process
Creating a Login File
Connecting to MySQL
A Practical Example
The $_POST Array
225
225
226
227
232
234
Table of Contents | vii
www
...
info
Download at Boykma
...
Form Handling
...
Templating with Smarty
...
it-ebooks
...
Com
13
...
279
Using Cookies in PHP
Setting a Cookie
Accessing a Cookie
Destroying a Cookie
HTTP Authentication
Storing Usernames and Passwords
Salting
Using Sessions
Starting a Session
Ending a Session
Session Security
Test Your Knowledge: Questions
279
281
281
282
282
285
285
289
289
292
293
296
14
...
299
JavaScript and HTML Text
Using Scripts Within a Document Head
Older and Nonstandard Browsers
Including JavaScript Files
Debugging JavaScript Errors
Using Comments
Semicolons
Variables
String Variables
Numeric Variables
Arrays
Operators
Arithmetic Operators
Assignment Operators
Comparison Operators
Logical Operators
Variable Incrementing and Decrementing
String Concatenation
Escaping Characters
Variable Typing
Functions
Global Variables
Local Variables
The Document Object Model
Browser Incompatibilities
Using the DOM
Test Your Knowledge: Questions
299
301
301
302
303
305
305
306
306
307
307
308
308
308
309
309
310
310
310
311
312
312
312
314
316
317
318
Table of Contents | ix
www
...
info
Download at Boykma
...
Expressions and Control Flow in JavaScript
...
catch
Conditionals
The if Statement
The switch Statement
The ? Operator
Looping
while Loops
do
...
JavaScript Functions, Objects, and Arrays
...
JavaScript and PHP Validation and Error Handling
...
html Document (Part One)
x | Table of Contents
355
356
www
...
info
Download at Boykma
...
html Document (Part Two)
Regular Expressions
Matching Through Metacharacters
Fuzzy Character Matching
Grouping Through Parentheses
Character Classes
Indicating a Range
Negation
Some More Complicated Examples
Summary of Metacharacters
General Modifiers
Using Regular Expressions in JavaScript
Using Regular Expressions in PHP
Redisplaying a Form After PHP Validation
Test Your Knowledge: Questions
358
361
361
362
363
363
364
364
364
367
369
369
369
370
375
18
...
377
What Is Ajax?
Using XMLHttpRequest
Your First Ajax Program
Using GET Instead of POST
Sending XML Requests
Test Your Knowledge: Questions
378
378
380
385
387
391
19
...
393
Choosing a Framework
Using YUI
Compressed Versions
Using YUI for Ajax
Other Uses for YUI
A Simple YUI Calendar
Test Your Knowledge: Questions
393
394
396
396
400
401
403
20
...
405
Designing a Social Networking Site
About Third-Party Add-Ons
On the Website
rnfunctions
...
php
rnsetup
...
php
rnsignup
...
it-ebooks
...
Com
Checking for Username Availability
rnsignup
...
php
rnlogin
...
php
Adding the “About Me” Text
Adding a Profile Image
Processing the Image
Displaying the Current Profile
rnmembers
...
php
rnmessages
...
php
412
415
417
417
419
420
420
420
421
424
424
424
424
427
430
432
A
...
435
B
...
453
C
...
457
D
...
461
E
...
473
Index
...
it-ebooks
...
Com
Preface
The combination of PHP and MySQL is the most convenient approach to dynamic,
database-driven web design, holding its own in the face of challenges from integrated
frameworks—such as Ruby on Rails—that are harder to learn
...
NET framework), it is free to implement and is
therefore an extremely popular option for web development
...
At the same time, the JavaScript is important, as it
provides the hidden communication with the web server to create seamless interfaces
...
This may include webmasters or graphic designers who are already creating static websites but wish to take their skills to the next level as well as high school and college
students, recent graduates, and self-taught individuals
...
0 technology known
as Ajax will obtain a thorough grounding in all three of the core technologies: PHP,
MySQL, and JavaScript
...
xiii
www
...
info
Download at Boykma
...
In the following section, you will gain a grounding in the PHP programming language,
covering the basics of syntax, arrays, functions, and object-oriented programming
...
After that, you will learn how you can combine PHP and MySQL to start creating your
own dynamic web pages by integrating forms and other HTML features
...
In the next three chapters, you will get down to the nitty-gritty practical aspects of PHP
and MySQL development by learning a variety of useful functions and how to manage
cookies and sessions, as well as how to maintain a high level of security
...
With an understanding of all three of these core technologies, you will then learn how
to make behind-the-scenes Ajax calls and turn your websites into highly dynamic
environments
...
Along the way, you’ll also find plenty of pointers and advice on good programming
practices and tips that could help you find and solve hard-to-detect programming errors
...
Supporting Books
Once you have learned to develop using PHP, MySQL, and JavaScript you will be ready
to take your skills to the next level using the following reference books:
•
•
•
•
Dynamic HTML: The Definitive Reference by Danny Goodman (O’Reilly)
PHP in a Nutshell by Paul Hudson (O’Reilly)
MySQL in a Nutshell by Russell Dyer (O’Reilly)
JavaScript: The Definitive Guide by David Flanagan (O’Reilly)
xiv | Preface
www
...
info
Download at Boykma
...
Italic
Indicates new terms, URLs, email addresses, filenames, file extensions, pathnames,
directories, and Unix utilities
...
Constant width bold
Shows commands or other text that should be typed literally by the user; also
occasionally used for emphasis
...
This icon signifies a tip, suggestion, or general note
...
Using Code Examples
This book is here to help you get your job done
...
You do not need to contact us for
permission unless you’re reproducing a significant portion of the code
...
Selling or distributing a CD-ROM of examples from O’Reilly books does
require permission
...
Incorporating a significant amount of example code
from this book into your product’s documentation does require permission
...
An attribution usually includes the title,
author, publisher, and ISBN
...
Copyright 2009 Robin Nixon, 978-0-596-15713-5
...
com
...
it-ebooks
...
Com
We’d Like to Hear from You
Every example in this book has been tested on various platforms, but occasionally you
may encounter problems; for example, if you have a nonstandard installation or a different version of PHP, and so on
...
However, mistakes and oversights can occur
and we will gratefully receive details of any you find, as well as any suggestions you
would like to make for future editions
...
1005 Gravenstein Highway North
Sebastopol, CA 95472
(800) 998-9938 (in the United States or Canada)
(707) 829-0515 (international or local)
(707) 829-0104 (fax)
We have a web page for this book, where we list errata, examples, and any additional
information
...
oreilly
...
net
where you can see all the examples with color-highlighted syntax
...
com
For more information about our books, conferences, Resource Centers, and the
O’Reilly Network, see our website at:
http://www
...
com
Safari® Books Online
When you see a Safari® Books Online icon on the cover of your favorite
technology book, that means the book is available online through the
O’Reilly Network Safari Bookshelf
...
It’s a virtual library that lets you easily
search thousands of top tech books, cut and paste code samples, download chapters,
and find quick answers when you need the most accurate, current information
...
safaribooksonline
...
xvi | Preface
www
...
info
Download at Boykma
...
In particular I must thank my technical reviewers, Derek DeHart, Christoph Dorn,
Tomislav Dugandzic, Becka Morgan, Harry Nixon, Alan Solis, and Demian Turner, for
their help in ensuring the accuracy of this book
...
Preface | xvii
www
...
info
Download at Boykma
...
it-ebooks
...
Com
CHAPTER 1
Introduction to Dynamic Web Content
The World Wide Web is a constantly evolving network that has already traveled far
beyond its conception in the early 1990s, when it was created to solve a specific problem
...
At this time, the Internet was already in place, with several hundred thousand computers connected to it, so Tim Berners-Lee (a CERN fellow) devised a method of navigating between them using a hyperlinking framework, which came to be known as
Hyper Text Transfer Protocol, or HTTP
...
To bring these together, he wrote the first
web browser and web server, tools that we now take for granted
...
The most connectivity so far experienced
by at-home modem users was dialing up and connecting to a bulletin board that was
hosted by a single computer, where you could communicate and swap data only with
other users of that service
...
But Berners-Lee changed all that with one fell swoop, and by the mid 1990s, there were
three major graphical web browsers competing for the attention of five million users
...
Yes, pages of text and
graphics with hyperlinks to take you to other pages was a brilliant concept, but the
results didn’t reflect the instantaneous potential of computers and the Internet to meet
the particular needs of each user with dynamically changing content
...
In this chapter, we’ll take a brief look at the various components that make
up the Web, and the software that helps make it a rich and dynamic experience
...
it-ebooks
...
Com
It is necessary to start using some acronyms more or less right away
...
But don’t worry
too much about what they stand for or what these names mean, because
the details will all become clear as you read on
...
The server’s job is to accept a request from the client and attempt to reply to it in a
meaningful way, usually by serving up a requested web page—that’s why the term
server is used
...
Between the client and the server there can be several other devices, such as routers,
proxies, gateways, and so on
...
Typically, they
use the Internet to send this information
...
When one arrives, the server sends back a response to confirm its receipt
...
The browser
then takes care of displaying the page (see Figure 1-1)
...
2
...
4
...
6
...
You enter http://server
...
Your browser looks up the IP address for server
...
Your browser issues a request for the home page at server
...
The request crosses the Internet and arrives at the server
...
The web server, having received the request, looks for the web page on its hard disk
...
Your browser displays the web page
...
In step 2, notice that the browser looked up the IP address of server
...
Every machine
attached to the Internet has an IP address—your computer included
...
com
...
it-ebooks
...
Com
Figure 1-1
...
For dynamic web pages, the procedure is a little more involved, because it may bring
both PHP and MySQL into the mix (see Figure 1-2)
...
2
...
4
...
6
...
8
...
You enter http://server
...
Your browser looks up the IP address for server
...
Your browser issues a request to that address for the web server’s home page
...
com web server
...
With the home page now in memory, the web server notices that it is a file incorporating PHP scripting and passes the page to the PHP interpreter
...
Some of the PHP contains MySQL statements, which the PHP interpreter now
passes to the MySQL database engine
...
HTTP and HTML: Berners-Lee’s Basics | 3
www
...
info
Download at Boykma
...
A dynamic client/server request/response sequence
10
...
11
...
Although it’s helpful to be aware of this process so that you know how the three elements work together, in practice you don’t really need to concern yourself with these
details, because they all happen automatically
...
4 | Chapter 1: Introduction to Dynamic Web Content
www
...
info
Download at Boykma
...
0, but it wasn’t long before
the rush was on to create Web 1
...
On the server side, progress was being made on the Common Gateway Interface (CGI)
using scripting languages such as Perl (an alternative to the PHP language) and serverside scripting—inserting the contents of one file (or the output of a system call) into
another one dynamically
...
Although Perl was still a popular scripting language with a strong following,
PHP’s simplicity and built-in links to the MySQL database program had earned it more
than double the number of users
...
Under
Ajax, web pages perform data handling and send requests to web servers in the background—without the web user being aware that this is going on
...
MySQL is a fast and powerful yet easy-to-use database system that offers just about
anything a website would need in order to find and serve up data to browsers
...
0
...
When you give
pages the
...
From a
developer’s point of view, all you have to do is write code such as the following:
echo "Hello World
...
date("l")
...
Outside of this construct, everything is sent to
the client as direct HTML
...
The final output of the two parts looks like this:
Hello World
...
How are you?
The Benefits of PHP, MySQL, and JavaScript | 5
www
...
info
Download at Boykma
...
Today is
...
The point is that with PHP, web developers have a scripting
language that although not as fast as compiling your code in C or a similar language,
is incredibly speedy and that also integrates seamlessly with HTML code
...
To facilitate this, you
may wish to prepare a file called example
...
Using PHP, you have unlimited control over your web server
...
Using MySQL
Of course, there’s not a lot of point to being able to change HTML output dynamically
unless you also have a means to track the changes that users make as they use your
website
...
But this approach could cause problems if the file wasn’t
correctly locked against corruption from multiple simultaneous accesses
...
That’s where relational databases with structured querying become essential
...
It is a robust and exceptionally fast database management
system that uses English-like commands
...
For example, let’s suppose you are working on a
table called users, within which you have created columns for surname, firstname, and
email, and you now wish to add another user
...
com');
Of course, as mentioned earlier, you will have issued other commands to create the
database and table and to set up all the correct fields, but the INSERT command here
shows how simple it can be to add new data to a database
...
it-ebooks
...
Com
example of SQL (which stands for “Structured Query Language”), a language designed
in the early 1970s and reminiscent of one of the oldest programming languages,
COBOL
...
It’s equally easy to look up data
...
To do this, you could issue a MySQL query
such as:
SELECT surname,firstname FROM users WHERE email='jsmith@mysite
...
As you’d expect, there’s quite a bit more that you can do with MySQL than just simple
INSERT and SELECT commands
...
Using PHP, you can make all these calls directly to MySQL without having to run the
MySQL program yourself or use its command-line interface
...
For even more power, as you’ll see later, there are additional functions built right in to
MySQL that you can call up for common operations and extra speed
...
In other words, it provides
a means for dynamic user interaction such as checking email address validity in input
forms, displaying prompts such as “Did you really mean that?”, and so on (although it
cannot be relied upon for security) which should always be performed on the web
server
...
However, JavaScript can also be tricky to use, due to some major differences among
the ways different browser designers have chosen to implement it
...
Thankfully, the manufacturers have mostly now come to their senses and have realized
the need for full compatibility between each other, so web developers don’t have to
write multiexception code
...
Luckily, there are solutions for the incompatibility
The Benefits of PHP, MySQL, and JavaScript | 7
www
...
info
Download at Boykma
...
For now, let’s take a quick look at how you can use basic JavaScript, accepted by all
browsers:
This code snippet tells the web browser to interpret everything within the script tags
as JavaScript, which the browser then does by writing the text “Hello World
...
The result will look something like this:
Hello World
...
As previously mentioned, JavaScript was originally developed to offer dynamic control
over the various elements within an HTML document, and that is still its main use
...
This is a term for the process of
accessing the web server in the background
...
)
Ajax is the main process behind what is now known as Web 2
...
Instead, a quick Ajax call can pull in and update a single element on
a web page, such as changing your photograph on a social networking site or replacing
a button that you click with the answer to a question
...
The Apache Web Server
There’s actually a fourth hero in the dynamic Web, in addition to our triumvirate of
PHP, MySQL, and JavaScript: the web server
...
We’ve discussed a little of what a web server does during the HTTP
server/client exchange, but it actually does much more behind the scenes
...
To do this, each element a web client encounters in an HTML page
is also requested from the server, which then serves it up
...
it-ebooks
...
Com
But these objects don’t have to be static files such as GIF images
...
That’s right: PHP can even create images
and other files for you, either on the fly or in advance to serve up later
...
One such module is the GD library (short for Graphics Draw), which
PHP uses to create and handle graphics
...
In addition to the PHP
module, the most important for your purposes as a web programmer are the modules
that handle security
...
Later in the book, you’ll see how to actually use some of these modules to enhance the
features provided by the three core technologies
...
What can be said, though, is that being open source means that they have been developed in the community by teams of programmers writing the features they themselves
want and need, with the original code available for all to see and change
...
There’s another benefit: all these programs are free to use
...
And you don’t need to check the budget before deciding whether to
upgrade to the latest versions of these products
...
They, too, are all open source
...
Bringing It All Together
The real beauty of PHP, MySQL, and JavaScript is the wonderful way in which they all
work together to produce dynamic web content: PHP handles all the main work on the
web server, MySQL manages all the data, and JavaScript looks after web page presentation
...
Bringing It All Together | 9
www
...
info
Download at Boykma
...
Gmail uses Ajax to check the availability of usernames
Without using program code, it’s a good idea at this point to summarize the contents
of this chapter by looking at the process of combining all three technologies into an
everyday Ajax feature that many websites use: checking whether a desired username
already exists on the site when a user is signing up for a new account
...
The steps involved in this Ajax process would be similar to the following:
1
...
2
...
3
...
4
...
10 | Chapter 1: Introduction to Dynamic Web Content
www
...
info
Download at Boykma
...
The JavaScript then places an indication next to the username input box to show
whether the name is one available to the user—perhaps a green checkmark or a
red cross graphic, along with some text
...
If the username is not available and the user still submits the form, the JavaScript
interrupts the submission and reemphasizes (perhaps with a larger graphic and/or
an alert box) that the user needs to choose another username
...
Optionally, an improved version of this process could even look at the username
requested by the user and suggest an alternative that is currently available
...
Without using Ajax, the entire form would have to be submitted to the server, which would then send back HTML, highlighting any mistakes
...
Ajax can be used for a lot more than simple input verification and processing, though;
we’ll explore many additional things that you can do with it in the Ajax chapters later
in this book
...
In Chapter 2, we’ll look at how you can install your own web development server on which to practice everything that you will be learning
...
What is their main difference, and why would you use both of them?
Question 1-5
If you encounter a bug (which is rare) in one of the open source tools, how do you
think you could get it fixed?
See the section “Chapter 1 Answers” on page 435 in Appendix A for the answers to
these questions
...
it-ebooks
...
Com
www
...
info
Download at Boykma
...
Even on a fast broadband connection, this can still represent a significant slowdown in
development time
...
Another advantage of a development server is that you don’t have to worry about embarrassing errors or security problems while you’re writing and testing, whereas you
need to be aware of what people may see or do with your application when it’s on a
public website
...
Once you have your own development server, you’ll wonder how you ever managed
without one, and it’s easy to set one up
...
In this chapter, we cover just the server side of the web experience, as described in
Chapter 1
...
Whenever possible, the list of browsers
should include at least Internet Explorer, Mozilla Firefox, Opera, Safari, and Google
Chrome
...
”
These abbreviations describe a fully functioning setup used for developing dynamic
Internet web pages
...
it-ebooks
...
Com
WAMPs, MAMPs, and LAMPs come in the form of a package that binds the bundled
programs together so that you don’t have to install and set them up separately
...
During installation, several default settings are created for you
...
For these reasons, you should never install such a setup as
a production server
...
If you choose not to go the W/L/MAMP route for building your own
development system, you should know that downloading and integrating the various parts yourself can be very time-consuming and may require a lot of research in order to configure everything fully
...
Installing a WAMP on Windows
There are several available WAMP servers, each offering slightly different configurations, but the easiest of these is the appropriately named EasyPHP
...
org (see Figure 2-1)
...
The
version used in this book is EasyPHP-3
...
exe, which is about 15
...
Once you’ve downloaded the file, run the installer and follow the prompts, accepting
the defaults you are given
...
Double-click the System Tray icon and the control window will pop up
...
Sometimes you may find that
the initial installation will not correctly start one or the other program, so if you don’t
see a green traffic light next to one, select Restart to get it going (see Figure 2-3)
...
14 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
You can download EasyPHP via the site’s main page
Figure 2-2
...
The EasyPHP control window with both Apache and MySQL running
Installing a WAMP on Windows | 15
www
...
info
Download at Boykma
...
How the home page should look
Antivirus programs can sometimes block these ports, as can programs like Skype, which
may try to grab port 80 for itself
...
Also, if you are using Windows Vista and find that either Apache or MySQL stop soon
after starting, odds are that the correct permissions have not been set for the EasyPHP
folders
...
0 folder, and select Properties
...
This problem has been known to occur only after a Windows
restart
...
To do
this, you are going to try to display the default web page, which will have been saved
in the server’s root folder (see Figure 2-4)
...
0
...
1/home
http://localhost/home
The first is the IP address that all computers use to refer to themselves
...
If all is well, you will see the default EasyPHP home screen
...
So create a folder on your hard disk called
16 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
Creating a directory for your project files
c:\web and then click Add underneath the Apache section
...
Then click OK,
leaving the settings displayed in section 4 as they are (see Figure 2-5)
...
An alias is a shortened,
easily recognizable string used to refer to a longer path name, and it doesn’t have to be
the same as a directory name
...
For example the alias “photos” could refer
to a folder called c:\myfiles\family\photos
...
So create a small HTML file along these lines using
Windows Notepad—not a rich word processor such as Word (unless you save as Plain
Text)—by selecting Start→Run, typing notepad and pressing Return:
A quick test
Once you have done this, save it using the full filename c:\web\index
...
txt)” to “All Files (*
...
it-ebooks
...
Com
Figure 2-6
...
But if you encountered any difficulties, check out the comprehensive EasyPHP
FAQ at http://easyphp
...
php, which should sort out your problem
...
So if you encounter difficulties with EasyPHP that you cannot
resolve, you may prefer to choose one of the various other solutions available on the
Web instead
...
Here’s a selection of the best in my opinion:
• XAMPP: http://apachefriends
...
html
• WAMPServer: http://wampserver
...
biz/glosswordwamp/
18 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
Select the correct MAMP version and download it
Installing a MAMP on Mac OS X
At the time of writing, probably the best MAMP solution is called simply MAMP
...
info/en/download
...
The program comes in two
flavors: regular and pro
...
If you have trouble accessing the http://mamp
...
net/project/showfiles
...
The
latest version (currently 1
...
2) will show by default, but for previous ones (such as
1
...
1), just click on the link entitled “mamp” under the “Package” Heading to see them
all
...
4 or greater, you can download the latest version of MAMP, which
will be 1
...
2 or higher
...
3, you’ll need to download the correct version
for that OS, which is likely to be 1
...
1 or similar (see Figure 2-7)
...
7
...
dmg
...
7
...
4
...
dmg
...
You need
to unzip the file using StuffIt Expander (or a similar product) to create a disk image
Installing a MAMP on Mac OS X | 19
www
...
info
Download at Boykma
...
Installing MAMP takes a few simple mouse actions
with a name similar to MAMP_1
...
2
...
4
...
dmg, and doubleclick that image to mount it as a drive on your desktop
...
7
...
4
...
When you do, the installer will appear,
asking you to drag and drop the MAMP folder at the top left of the window down into
the Applications folder alias at the bottom left
...
Open up your Applications folder, where you will find a new folder called MAMP
...
The main three that should
concern you for now are htdocs, which is where you will be saving your HTML and
PHP files; README
...
To make things easier for yourself in the future, I recommend that you make an alias
to the MAMP folder and place the alias on your desktop
...
20 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
The MAMP application in your Applications folder and after copying to your desktop
You are now ready to run the MAMP for the first time
...
The Apache and MySQL servers should start automatically and display their status in
the control window
...
Then you’ll see the welcome page in your browser (see Figure 2-10)
...
So, using an editor such as TextEdit, create a file called index
...
it-ebooks
...
Com
Figure 2-10
...
html file
...
To get back to the main welcome page at any time, you can click on the “Open start
page” button in the control window
...
If everything is working correctly, you will now be presented with a very long page of
information all about your installation of PHP (see Figure 2-12)
...
At this point, there’s no need to explain what this new page does
...
22 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
The MAMP—working and displaying the test page
Figure 2-12
...
it-ebooks
...
Com
Figure 2-13
...
com, you are really visiting port 80 of the server
hosting the website
...
But by default, MAMP uses ports 8888 and 8889 for Apache and MySQL, respectively
...
As you’ll recall, instead of typing the URL localhost into your web browser, you had to
type localhost:8888, which is rather annoying
...
Now click “Set to default Apache and MySQL ports,” then click OK (see
Figure 2-13)
...
0
...
1
24 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
org/en/xampp
...
If you have at least OS X 10
...
You may also be interested in the new Zend Server CE (Community Edition)
available at http://zend
...
This is another free
W/M/LAMP and, as I write, it’s available as a release candidate—but the final release
should be ready by the time you read this
...
Users of versions of OS X prior to 10
...
So I recommend that you upgrade your operating system, if you can, in order to
make use of the simple installation processes available
...
If not, your best bet is probably to look at XAMPP for Linux, which is available
at http://apachefriends
...
html
...
After downloading, go to a Linux shell and log in as
the system administrator (root) by typing:
su
Enter your system administration password
...
Some systems, including the popular Ubuntu, encourage you not to use su to log in as root, but
to precede each system administration command with sudo instead
...
Now extract the
downloaded archive file to /opt with the following command (inserting the appropriate
filename if the version you downloaded is a later version):
tar xvfz xampp-linux-1
...
8a
...
gz -C /opt
Any XAMPP version that was already installed will be overwritten by this command
...
To start it, enter the following:
/opt/lampp/lampp start
You should now see something like this on your screen:
Starting XAMPP 1
...
8a
...
Installing a LAMP on Linux | 25
www
...
info
Download at Boykma
...
LAMPP started
...
Apache and MySQL are running
...
Type the following URL into your web browser’s
address bar:
http://localhost
You should now see the start page of XAMPP, containing some links to check the status
of the installed software and some small programming examples (see Figure 2-14)
...
XAMPP for Linux, installed and running
Working Remotely
If you have access to a web server already configured with PHP and MySQL, you can
always use that for your web development
...
Developing locally allows you to test modifications with little or no upload delay
...
it-ebooks
...
Com
Accessing MySQL remotely may not be easy either
...
Your web hosting company will advise you on how best to do this and provide
you with any password they have set for your MySQL access (as well as, of course, for
getting into the server in the first place)
...
org, for Telnet and SSH access (remember that SSH is
much more secure than Telnet)
...
Just select the Applications folder, followed
by Utilities, and then launch Terminal
...
com
where server
...
You will then be prompted for the correct password
for that username and, if you enter it correctly, you will be logged in
...
If you go
searching the Web for a good one, you’ll find so many that it could take you quite a
while to come across one with all the right features for you
...
• Calling it up can be as simple as selecting a bookmark
...
You may say “But I use only Microsoft Internet Explorer and FireFTP
is not available for it,” but I would counter that if you are going to develop web pages, you need a copy of each of the main browsers installed
on your PC anyway, as suggested at the start of this chapter
...
mozdev
...
It’s about half a megabyte in size and installs very quickly
...
Working Remotely | 27
www
...
info
Download at Boykma
...
FireFTP offers full FTP access from within Firefox 3
Unfortunately, at the time of writing, Firefox 3 would not run on any versions of OS X
prior to 10
...
If that is the case for you, I recommend that you install the excellent
Classic FTP program available at http://nchsoftware
...
Unlike most other FTP
programs for the Mac, it’s free and it runs on OS X 10
...
If you have an OS earlier than 10
...
co
...
html
...
Another excellent FTP program is the open source FileZilla, available from http://file
zilla-project
...
5 or newer
...
Using a Program Editor
Although a plain-text editor works for editing HTML, PHP, and JavaScript, there have
been some tremendous improvements in dedicated program editors, which now
28 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
Classic FTP for the Mac, which runs on OS X 10
...
Today’s program
editors are smart and can show you where you have syntax errors before you even run
a program
...
There are a number of good programs available, but I have settled on Editra, because
it’s free and available through a simple installer for both the Mac and the PC, and in
source code form for Linux/Unix
...
org and selecting the Download link toward the top left of the page, where you can
also find the documentation for it
...
It also notices when it encounters PHP code and correctly highlights
that, too, using colors different from the HTML color tones to help clarify what’s going
on
...
In fact, Editra does a lot more in addition, which you will discover and enjoy as you
use it
...
it-ebooks
...
Com
Figure 2-17
...
Using an IDE
As good as dedicated program editors can be for your programming productivity, their
utility pales into insignificance when compared to Integrated Development Environments (IDEs), which offer many additional features such as in-editor debugging and
program testing, as well as function descriptions and much more
...
When developing with an IDE, you can set breakpoints and then run all (or portions)
of your code, which will then stop at the breakpoints and provide you with information
about the program’s current state
...
30 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
When using an IDE such as phpDesigner, PHP development becomes much quicker and
easier
There are several IDEs available for different platforms, most of which are commercial,
but there are some free ones, too
...
Table 2-1
...
org/pdt/downloads/
Free
✓
✓
✓
Komodo IDE
http://activestate
...
netbeans
...
dk
$86
✓
PHPEclipse
http://phpeclipse
...
com
$119
✓
PHPEdit
http://phpedit
...
com/en/downloads
$500
✓
✓
✓
✓
Using an IDE | 31
www
...
info
Download at Boykma
...
You should take the time to install a program editor or IDE you are comfortable with
and you’ll then be ready to type in and try out the examples in the coming chapters
...
But before moving on, I
suggest you test your new knowledge with the following questions
...
0
...
1 and the URL http://localhost have in common?
Question 2-3
What is the purpose of an FTP program?
Question 2-4
Name the main disadvantage of working on a remote web server
...
32 | Chapter 2: Setting Up a Development Server
www
...
info
Download at Boykma
...
In this chapter, you’ll start learning this simple but powerful language;
it will be the topic of the following chapters up through Chapter 6
...
It
will help you catch typos and speed up learning tremendously in comparison to less
feature-rich editors
...
I’ll also show you how to embed the PHP in an HTML file
so that you can see what the output looks like in a web page (the way your users will
ultimately see it)
...
In production, your web pages will be a combination of PHP, HTML, and JavaScript,
and some MySQL statements
...
We can avoid all that
complexity while learning each language, though
...
php
...
Of
course, web servers are highly configurable, and some web developers choose to force
files ending with
...
html to also get parsed by the PHP processor, usually because
developers want to hide the fact that they are using PHP
...
it-ebooks
...
Com
Your PHP program is responsible for passing back a clean file suitable for display in a
web browser
...
To prove
this, you can take any normal HTML document such as an index
...
php, and it will display identically to the original
...
The first part is:
The first thing you may notice is that the tag has not been closed
...
Example 3-1
...
Some programmers open the tag at the start
of a document and close it right at the end, outputting any HTML directly from PHP
commands
...
The latter type of programmer generally argues that their style of coding results in faster
code, while the former say that the speed increase is so minimal that it doesn’t justify
the additional complexity of dropping in and out of PHP many times in a single
document
...
By the way, a slight variation to the PHP syntax exists
...
it-ebooks
...
Com
Figure 3-1
...
net
Although it’s not as obvious that the PHP parser is being called, this is a valid alternative
syntax that also usually works (although not with the EasyPHP WAMP package), but
should be discouraged, as it is incompatible with XML and its use is now deprecated
(meaning that it is no longer recommended and could be removed in future versions)
...
This
is actually good practice, as it will ensure you have no excess whitespace
leaking from your PHP files (especially important when writing objectoriented code)
...
net, where
you can view each one individually—with color highlighting of syntax—and download
them onto your computer (see Figure 3-1)
...
php), the provided examples
...
php)
...
it-ebooks
...
Com
If you read this book in front of a computer (and hopefully you will, so that you can
try out what you learn), using the website you’ll also be able to view any examples onscreen with a maximum of two clicks, making them easy to reference as you read
...
It’s not too difficult, but I
recommend that you work your way through it carefully, as it sets the foundation for
everything else in this book
...
Using Comments
There are two ways in which you can add comments to your PHP code
...
For example, you could use such a comment
to hide a debugging line of code until you need it, like this:
// echo "X equals $x";
You can also use this type of comment directly after a line of code to describe its action,
like this:
$x += 10; // Increment $x by 10
When you need multiple-line comments, there’s a second type of comment, which
looks like Example 3-2
...
A multiline comment
/* This is a section
of multiline comments
which will not be
interpreted */
?>
You can use the /* and */ pairs of characters to open and close comments almost
anywhere you like inside your code
...
36 | Chapter 3: Introduction to PHP
www
...
info
Download at Boykma
...
You can’t nest comments this way; the PHP interpreter
won’t know where a comment ends and will display an error message
...
Basic Syntax
PHP is quite a simple language with roots in C and Perl, yet looks more like Java
...
Semicolons
You may have noticed in the previous examples that the PHP commands ended with
a semicolon, like this:
$x += 10;
Probably the most common cause of errors you will encounter with PHP is to forget
this semicolon, which causes PHP to treat multiple statements like one statement, find
itself unable to understand it, and produce a “Parse error” message
...
For example, if you have ever written in the BASIC language, you will have
used the $ to terminate variable names to denote them as strings
...
This is required to make
the PHP parser faster, as it instantly knows whenever it comes across a variable
...
Example 3-3
...
Unlike languages such as Python, which are very strict about how you indent and lay out code,
PHP leaves you completely free to use (or not use) all the indenting and spacing you
like
...
It also helps other programmers when they have to maintain your code
...
it-ebooks
...
Com
Figure 3-2
...
Just think of them as little (or big) matchboxes! That’s right, matchboxes that
you’ve painted white and written names on
...
You then
write Fred Smith on a piece of paper and place it into the box (see Figure 3-2)
...
You must
enclose each string in either quotation marks or apostrophes (single quotes), although
there is a subtle difference between the two types of quote, which is explained later
...
In PHP, doing so looks like this:
echo $username;
Or you can assign it to another variable (photocopy the paper and place the copy in
another matchbox), like this:
$current_user = $username;
If you are keen to start trying out PHP for yourself, you could try entering the examples
in this chapter into an IDE (as recommended at the end of Chapter 2), to see instant
results, or you could enter the code in Example 3-4 into a program editor and save it
to your web development directory (also discussed in Chapter 2) as test1
...
38 | Chapter 3: Introduction to PHP
www
...
info
Download at Boykma
...
Your first PHP program
...
php into the address bar of your browser
...
php
The result of running this code should be two occurrences of the name “Fred Smith”,
the first of which is the result of the echo $username command and the second is from
the echo $current_user command
...
Using the matchbox analogy, to store the number 17 in the variable $count, the equivalent would be
placing, say, 17 beads in a matchbox on which you have written the word count:
$count = 17;
You could also use a floating-point number (containing a decimal point); the syntax is
the same:
$count = 17
...
In PHP, you would assign the value of $count to another variable or perhaps just echo
it to the web browser
...
For example, let’s say we want to store the player names for a five-person soccer team
in an array called $team
...
Across the whole top of the matchbox assembly we would write the word team (see
Figure 3-3)
...
it-ebooks
...
Com
This syntax is more complicated than the ones I’ve explained so far
...
Each string is enclosed in apostrophes
...
An array is like several matchboxes glued together
The reason the previous statement has the number 3 and not a 4 is because the first
element of a PHP array is actually the zeroth element, so the player numbers will therefore be 0 through 4
...
For example, instead of being singledimensional lines of matchboxes, they can be two-dimensional matrixes or can even
have three or more dimensions
...
To
represent this with matchboxes, imagine nine of them glued to each other in a matrix
of three rows by three columns (see Figure 3-4)
...
To do this in PHP code, you have to set up an array containing
40 | Chapter 3: Introduction to PHP
www
...
info
Download at Boykma
...
A multidimensional array simulated with matchboxes
three more arrays, as in Example 3-5, in which the array is set up with a game already
in progress
...
Defining a two-dimensional array
$oxo = array(array('x', '', 'o'),
array('o', 'o', 'x'),
array('x', 'o', '' ));
?>
Once again, we’ve moved up a step in complexity, but it’s easy to understand if you
grasp the basic array syntax
...
To then return the third element in the second row of this array, you would use the
following PHP command, which will display an “x”:
echo $oxo[1][2];
Remember that array indexes (pointers at elements within an array) start
from zero, not one, so the [1] in the previous command refers to the
second of the three arrays, and the [2] references the third position
within that array
...
As mentioned, arrays with even more dimensions are supported by simply creating
more arrays within arrays
...
The Structure of PHP | 41
www
...
info
Download at Boykma
...
Variable naming rules
When creating PHP variables, you must follow these four rules:
• Variable names must start with a letter of the alphabet or the _ (underscore)
character
...
• Variable names may not contain spaces
...
(e
...
, $user_name)
...
The variable $High_Score is not the same as the
variable $high_score
...
PHP looks a lot like plain arithmetic; for instance, the
following statement outputs 8:
echo 6 + 2;
Before moving on to learn what PHP can do for you, take a moment to learn about the
various operators it provides
...
They are used to perform mathematics
...
Table 3-1
...
it-ebooks
...
Com
Assignment operators
These operators are used to assign values to variables
...
The operator += adds the value on
the right side to the variable on the left, instead of totally replacing the value on the
left
...
), detailed in the section “String concatenation” on page 46
...
Assignment operators
Operator
Example
Equivalent to
=
$j = 15
$j = 15
+=
$j += 5
$j = $j + 5
-=
$j -= 3
$j = $j - 3
*=
$j *= 8
$j = $j * 8
/=
$j /= 16
$j = $j / 16
...
= $k
$j = $j
...
For example, you may wish to know whether
a variable you have been incrementing has reached a specific value, or whether another
variable is less than a set value, and so on (see Table 3-3)
...
The first is an assignment operator, and the
second is a comparison operator
...
Table 3-3
...
it-ebooks
...
Com
Logical operators
If you haven’t used them before, logical operators may at first seem a little daunting
...
For example, you might
say to yourself “If the time is later than 12pm and earlier than 2pm, then have lunch
...
The then of the statement is left out,
because it is implied and therefore unnecessary
...
A logical
operator can also be input to another logical operator (“If the time is later than 12pm
and earlier than 2pm, or if the smell of a roast is permeating the hallway and there are
plates on the table”)
...
A logical operator takes two true-or-false inputs and produces a
true-or-false result
...
Table 3-4
...
But
and and or have a lower precedence, so in some cases, you may need extra parentheses
to force the required precedence
...
To understand this, imagine that you want to concoct your own
cleaner for household items
...
it-ebooks
...
Com
you want your cleaner to have one of these
...
In PHP, you could represent this as:
$ingredient = $ammonia xor $bleach;
In the example snippet, if either $ammonia or $bleach is true, $ingredient will also be
set to true
...
Variable Assignment
The syntax to assign a value to a variable is always variable = value
...
There are also a couple of other assignment operators that you will find useful
...
Likewise, we could subtract as follows:
$y -= 10;
Variable incrementing and decrementing
Adding or subtracting 1 is such a common operation that PHP provides special operators for it
...
But you can also require PHP to increment (or, in the
following example, decrement) a variable after it has tested the value, like this:
if ($y-- == 0) echo $y;
which gives a subtly different result
...
The comparison will return a true result, but $y will be set to −1 after the
comparison is made
...
Because this combination
of statements is confusing, it should be taken as just an educational example and not
as a guide to good programming style
...
The Structure of PHP | 45
www
...
info
Download at Boykma
...
String concatenation
String concatenation uses the period (
...
The simplest way to do this is as follows:
echo "You have "
...
" messages
...
Just as you can add a value to a numeric variable with the += operator, you can append
one string to another using
...
= $newsflash;
In this case, if $bulletin contains a news bulletin and $newsflash has a news flash, the
command appends the news flash to the news bulletin so that $bulletin now comprises
both strings of text
...
If you wish to assign a literal string, preserving the exact contents, you should
use the single quotation mark (apostrophe) like this:
$info = 'Preface variables with a $ like this: $variable';
In this case, every character within the single-quoted string is assigned to $info
...
On the other hand, when you want to include the value of a variable inside a string,
you do so by using double-quoted strings:
echo "There have been $count presidents of the US";
As you will realize, this syntax also offers a simpler form of concatenation in which you
don’t need to use a period, or close and reopen quotes, to append one string to another
...
Escaping characters
Sometimes a string needs to contain characters with special meanings that might be
interpreted incorrectly
...
it-ebooks
...
Com
the string end has been reached
...
For example, the following doublequoted string will be correctly assigned:
$text = "My Mother always said \"Eat your greens\"
...
These are represented, as you might
guess, by \t, \n, and \r
...
In
single-quoted strings, the preceding string would be displayed with the ugly \t sequences instead of tabs
...
Multiple-Line Commands
There are times when you need to output quite a lot of text from PHP and using several
echo (or print) statements would be time-consuming and messy
...
The first is just to put multiple lines between quotes, as
in Example 3-6
...
Example 3-6
...
This is the second
...
";
?>
Example 3-7
...
it-ebooks
...
Com
$text = "This is a Headline
This is the first line
...
Written by $author
...
Its use can be
seen in Example 3-8
...
Alternative multiline echo statement
$author = "Alfred E Newman";
echo <<<_END
This is a Headline
This is the first line
...
- Written by $author
...
This means it’s possible, for example, for a developer to
write entire sections of HTML directly into PHP code and then just replace specific
dynamic parts with PHP variables
...
Once you have closed a multiline block,
you are free to use the same tag name again
...
_END; heredoc construct, you don’t
have to add \n linefeed characters to send a linefeed—just press Return
and start a new line
...
Example 3-9 shows how to use the same syntax to assign multiple lines to a variable
...
A multiline string variable assignment
$author = "Alfred E Newman";
$out = <<<_END
48 | Chapter 3: Introduction to PHP
www
...
info
Download at Boykma
...
This is the second
...
_END;
?>
The variable $out will then be populated with the contents between the two tags
...
= in place of = to
append the string to $out
...
The only place for the semicolon is after the terminating _END tag, although
it is safe to use semicolons within the block as normal text characters
...
But you can use any tag
you like such as _SECTION1 or _OUTPUT and so on
...
Laying out text over multiple lines is usually just a convenience to make your PHP code
easier to read, because once it is displayed in a web page, HTML formatting rules take
over and whitespace is suppressed, but $author is still replaced with the variable’s value
...
This means that variables do not have to be
declared before they are used, and that PHP always converts variables to the type required by their context when they are accessed
...
In the following snippet of code, the numbers
12345 and 67890 are multiplied together, returning a result of 838102050, which is
then placed in the variable $number, as shown in Example 3-10
...
Automatic conversion from a number to a string
$number = 12345 * 67890;
echo substr($number, 3, 1);
?>
At the point of the assignment, $number is a numeric variable
...
To do this, PHP turns $number into a nine-character string, so that substr can
access it and return the character, which in this case is 1
...
it-ebooks
...
Com
The same goes for turning a string into a number and so on
...
5398175
...
Automatically converting a string to a number
$pi = "3
...
Just assign them values that make sense to you and PHP will convert
them if necessary
...
Constants
Constants are similar to variables, holding information to be accessed later, except that
they are what they sound like—constant
...
One example of a use for a constant might be to hold the location of your server root
(the folder with the main files of your website)
...
The main two things you have to remember about constants are that
they must not be prefaced with a $ sign (as with regular variables), and
that you can define them only using the define function
...
50 | Chapter 3: Introduction to PHP
www
...
info
Download at Boykma
...
However, there are a few—known as the magic
constants—that you will find useful
...
They are
detailed in Table 3-5
...
Table 3-5
...
__FILE__
The full path and filename of the file
...
In versions of PHP since 4
...
2, __FILE__ always contains an absolute path with symbolic
links resolved, whereas in older versions it might contain a relative path under some circumstances
...
If used inside an include, the directory of the included file is returned
...
This directory name does not have a trailing slash unless
it is the root directory
...
3
...
)
__FUNCTION__
The function name
...
3
...
) As of PHP 5, returns the function name as it was declared
(case-sensitive)
...
__CLASS__
The class name
...
3
...
) As of PHP 5, returns the class name as it was declared (casesensitive)
...
__METHOD__
The class method name
...
0
...
) The method name is returned as it was declared
(case-sensitive)
...
This constant is defined at compile time
...
3
...
)
One handy use of these variables is for debugging purposes, when you need to insert a
line of code to see whether the program flow reaches it:
echo "This is line "
...
" of file "
...
The Difference Between the echo and print Commands
So far, you have seen the echo command used in a number of different ways to output
text from the server to your browser
...
In
others, strings have first been concatenated or variables have been evaluated
...
The Structure of PHP | 51
www
...
info
Download at Boykma
...
The two commands are
quite similar to each other, but print is an actual function that takes a single parameter,
whereas echo is a PHP language construct
...
On the other hand, because it isn’t a function, echo cannot be used as part of a more
complex expression, whereas print can
...
Whichever command is on the left of the following colon is executed if $b is
true, whereas the command to the right is executed if $b is false
...
Functions
Functions are used to separate out sections of code that perform a particular task
...
That
would be a good example to turn into a function
...
And if you
decide to change the data format later, putting it in a function means having to change
it in only one place
...
They can also return values to the calling
code
...
Example 3-12
...
it-ebooks
...
Com
This function takes a Unix timestamp (an integer number representing a date and time
based on the number of seconds since 00:00 AM on January 1, 1970) as its input and
then calls the PHP date function with the correct format string to return a date in the
format Wednesday August 1st 2012
...
The curly braces enclose all
the code that is executed when you later call the function
...
If you need to print out the date 17 days ago, you now just
have to issue the following call:
echo longdate(time() - 17 * 24 * 60 * 60);
which passes to longdate the current Unix timestamp less the number of seconds since
17 days ago (17 days × 24 hours × 60 minutes × 60 seconds)
...
Variable Scope
If you have a very long program, it’s quite possible that you could start to run out of
good variable names, but with PHP you can decide the scope of a variable
...
In fact, this is the default scope for PHP variables
...
Local variables
Local variables are variables that are created within and can be accessed only by a
function
...
One set of local variables is the list of arguments to a function
...
This is meaningful
only in the body of the function; you can’t get or set its value outside the function
...
The Structure of PHP | 53
www
...
info
Download at Boykma
...
An expanded version of the longdate function
function longdate($timestamp)
{
$temp = date("l F jS Y", $timestamp);
return "The date is $temp";
}
?>
Here we have assigned the value returned by the date function to the temporary variable
$temp, which is then inserted into the string returned by the function
...
Now, to see the effects of variable scope, let’s look at some similar code in Example 3-14
...
Example 3-14
...
date("l F jS Y", $timestamp);
}
?>
However, because $temp was neither created within the longdate function nor passed
to it as a parameter, longdate cannot access it
...
In fact it will first display the error message “Notice:
Undefined variable: temp
...
Some ways to repair Example 3-14 appear in Examples 3-15 and 3-16
...
Rewriting to refer to $temp within its local scope fixes the problem
$temp = "The date is ";
echo $temp
...
The reference appears
in the same scope where the variable was defined
...
it-ebooks
...
Com
Example 3-16
...
date("l F jS Y", $timestamp);
}
?>
The solution in Example 3-16 passes $temp to the longdate function as an extra argument
...
Forgetting the scope of a variable is a common programming error, so
remembering how variable scope works will help you debug some quite
obscure problems
...
Global variables
There are cases when you need a variable to have global scope, because you want all
your code to be able to access it
...
To declare a variable as having global scope, use the keyword global
...
One way to do this is to create
a global variable such as $is_logged_in:
global $is_logged_in;
Now your login function simply has to set that variable to 1 upon success of a login
attempt, or 0 upon its failure
...
You should use global variables with caution, though
...
In general, programs that are broken into small parts and segregated data are
less buggy and easier to maintain
...
All manner of strange bugs can arise from such situations
...
it-ebooks
...
Com
Static variables
In the section “Local variables” on page 53, I mentioned that the value of the variable
is wiped out when the function ends
...
Here’s an interesting case
...
The solution is to declare
a static variable, as shown in Example 3-17
...
A function using a static variable
function test()
{
static $count = 0;
echo $count;
$count++;
}
?>
Here the very first line of function test creates a static variable called $count and initializes it to a value of zero
...
The next time the function is called, because $count has already been declared, the first
line of the function is skipped
...
If you plan to use static variables, you should note that you cannot assign the result of
an expression in their definitions
...
Example 3-18
...
1
...
These are known as
superglobal variables, which means that they are provided by the PHP environment but
are global within the program, accessible absolutely everywhere
...
They are structured as associative arrays, a
topic discussed in Chapter 6
...
it-ebooks
...
Com
Table 3-6
...
The variable names are the keys
of the array
...
The entries in this array are created by the web
server and there is no guarantee that every web server will provide any or all of these
...
$_POST
Variables passed to the current script via the HTTP POST method
...
$_COOKIE
Variables passed to the current script via HTTP cookies
...
$_REQUEST
Contents of information passed from the browser; by default, $_GET, $_POST and $_COOKIE
...
All of the superglobals are named with a single initial underscore and only capital letters; therefore, you should avoid naming your own variables in this manner to avoid
potential confusion
...
Among the many nuggets of information supplied by superglobal variables is the URL
of the page that referred the user to the current web page
...
Oh, and if the user came straight to your web page, such as by typing
its URL directly into a browser, $came_from will be set to an empty string
...
What they
do is load up $_POST, $_GET, or other superglobals with malicious code, such as Unix
or MySQL commands that can damage or display sensitive data if you naïvely access
them
...
One way to do
this is via the PHP htmlentities function
...
For example, less-than and greater-than characters (< and >) are transformed into the
strings < and > so that they are rendered harmless, as are all quotes and backslashes, and so on
...
it-ebooks
...
Com
This chapter has provided you with a solid background in using PHP
...
In other words, some actual programming
...
Test Your Knowledge: Questions
Question 3-1
What tag is used to cause PHP to start interpreting program code? And what is the
short form of the tag?
Question 3-2
What are the two types of comment tags?
Question 3-3
Which character must be placed at the end of every PHP statement?
Question 3-4
Which symbol is used to preface all PHP variables?
Question 3-5
What can a variable store?
Question 3-6
What is the difference between $variable = 1 and $variable == 1?
Question 3-7
Why do you suppose that an underscore is allowed in variable names
($current_user) whereas hyphens are not ($current-user) ?
Question 3-8
Are variable names case-sensitive?
Question 3-9
Can you use spaces in variable names?
Question 3-10
How do you convert one variable type to another (say, a string to a number)?
Question 3-11
What is the difference between ++$j and $j++?
Question 3-12
Are the operators && and and interchangeable?
Question 3-13
How can you create a multiline echo or assignment?
Question 3-14
Can you redefine a constant?
58 | Chapter 3: Introduction to PHP
www
...
info
Download at Boykma
...
Question 3-20
What is the result of combining a string with a number?
See the section “Chapter 3 Answers” on page 436 in Appendix A for the answers to
these questions
...
it-ebooks
...
Com
www
...
info
Download at Boykma
...
In the
previous chapter, I wanted to focus on the most basic syntax and operations in PHP,
but I couldn’t avoid touching on more advanced topics
...
In this chapter, you will get a thorough grounding in how PHP programming works in
practice and how to control the flow of the program
...
An expression is a combination of values, variables, operators, and functions that results in a value
...
By now, you should be familiar with the first two value types, but I’ll explain the
third
...
For example, the expression “20 >
9” (20 is greater than 9) is TRUE, and the expression “5 == 6” (5 is equal to 6) is FALSE
...
)
Note that I am using uppercase letters for the names TRUE and FALSE
...
You can also use the lowercase versions, if you
prefer, as they are also predefined
...
it-ebooks
...
Com
because PHP does not allow you to redefine them; the uppercase ones may be
redefined—something you should bear in mind if you import third-party code
...
For each line, it prints out a letter between a and d, followed by a colon and the
result of the expressions (the
tag is there to create a line break and thus separate
the output into four lines in HTML)
...
Four simple Boolean expressions
echo "a:
echo "b:
echo "c:
echo "d:
?>
["
["
["
["
...
...
(20 >
(5 ==
(1 ==
(1 ==
9)
6)
0)
1)
...
...
"]
"]
"]
"]
/>";
/>";
/>";
/>";
The output from this code is as follows:
a:
b:
c:
d:
[1]
[]
[]
[1]
Notice that both expressions a: and d: evaluate to TRUE, which has a value of 1
...
To verify this for yourself, you could enter the code
in Example 4-2
...
Outputting the values of TRUE and FALSE
...
TRUE
...
FALSE
...
Literals and Variables
The simplest form of an expression is a literal, which simply means something that
evaluates to itself, such as the number 73 or the string “Hello”
...
They
are both types of expressions, because they return a value
...
62 | Chapter 4: Expressions and Control Flow in PHP
www
...
info
Download at Boykma
...
Five types of literals
$myname = "Brian";
$myage = 37;
echo "a: "
...
"Hello"
echo "c: "
...
$myname
echo "e: "
...
...
...
"
"
"
"
"
/>";
/>";
/>";
/>";
/>";
//
//
//
//
//
Numeric literal
String literal
Constant literal
Variable string literal
Variable numeric literal
And, as you’d expect, you see a return value from all of these with the exception of
c:, which evaluates to FALSE, returning nothing in the following output:
a:
b:
c:
d:
e:
73
Hello
Brian
37
In conjunction with operators, it’s possible to create more complex expressions that
evaluate to useful results
...
Example 4-4 shows one of each
...
Example 4-4
...
Table 4-1
...
it-ebooks
...
Com
Operator
Description
Example
Comparison
Compare two values
$a < $b
Execution
Executes contents of backticks
`ls -al`
Increment/Decrement
Add or subtract 1
$a++
Logical
Boolean
$a and $b
String
Concatenation
$a
...
• Binary operators, which represent the bulk of PHP operators, including addition,
subtraction, multiplication, and division
...
It’s a terse, single-line if
statement that chooses between two expressions, depending on the result of a third
one
...
In fact, many operators do have the same precedence, so let’s
look at a few in Example 4-5
...
Three equivalent expressions
1 + 2 + 3 - 4 + 5
2 - 4 + 5 + 3 + 1
5 + 2 - 4 + 1 + 3
Here you will see that although the numbers (and their preceding operators) have been
moved, the result of each expression is the value 7, because the plus and minus operators have the same precedence
...
Example 4-6
...
5
...
64 | Chapter 4: Expressions and Control Flow in PHP
www
...
info
Download at Boykma
...
Three expressions using operators of mixed precedence
1 + 2 * 3 - 4 * 5
2 - 4 * 5 * 3 + 1
5 + 2 - 4 + 1 * 3
If there were no operator precedence, these three expressions would evaluate to 25,
−29, and 12, respectively
...
Example 4-8
...
Example 4-9
...
Of course, you can override the default operator precedence by inserting your own
parentheses and force the original results that we would have seen, had there been no
operator precedence (see Example 4-10)
...
Forcing left-to-right evaluation
((1 + 2) * 3 - 4) * 5
(2 - 4) * 5 * 3 + 1
(5 + 2 - 4 + 1) * 3
With parentheses correctly inserted, we now see the values 25, −29, and 12,
respectively
...
Table 4-2
...
it-ebooks
...
Com
Operator(s)
Type
+ -
...
= %= &= != ^= <<= >>=
Assignment
and
Logical
xor
Logical
or
Logical
Associativity
We’ve been looking at processing expressions from left to right, except where operator
precedence is in effect
...
The direction of processing is called the operator’s associativity
...
Table 4-3 lists all the operators that have right-to-left associativity
...
Operators with right-to-left associativity
Operator
Description
NEW
Create a new object
!
Logical NOT
~
Bitwise NOT
++ --
Increment and decrement
+ -
Unary plus and negation
(int)
Cast to an integer
(double)
Cast to a float
(string)
Cast to a string
(array)
Cast to an array
(object)
Cast to an object
@
Inhibit error reporting
66 | Chapter 4: Expressions and Control Flow in PHP
www
...
info
Download at Boykma
...
Example 4-11
...
As a beginner to PHP, you should learn to avoid the potential pitfalls of
operator associativity by always nesting your subexpressions within parentheses to force the order of evaluation
...
Relational Operators
Relational operators test two operands and return a Boolean result of either TRUE or
FALSE
...
Equality
As already encountered a few times in this chapter, the equality operator is == (two
equals signs)
...
In Example 4-12, the first statement assigns a value and the second tests it
for equality
...
Assigning a value and testing for equality
$month = "March";
if ($month == "March") echo "It's springtime";
?>
As you see, returning either TRUE or FALSE, the equality operator enables you to test for
conditions using, for example, an if statement
...
If the two operands of an equality expression are of
different types, PHP will convert them to whatever type makes best sense to it
...
it-ebooks
...
Com
For example, any strings composed entirely of numbers will be converted to numbers
whenever compared with a number
...
Example 4-13
...
This is because both strings were
first converted to numbers, and 1000 is the same numerical value as +1000
...
$a and $b are therefore compared as strings and are now found to be different, so nothing is output
...
In the same way that you can use the equality operator to test for operands being equal,
you can test for them not being equal using !=, the inequality operator
...
Example 4-14
...
Instead, it outputs the number 2, because the second if statement is asking whether
$a and $b are not identical to each other in their present operand types, and the answer
is TRUE; they are not the same
...
PHP also gives you > (is greater than), < (is less than), >= (is greater than or equal to),
and <= (is less than or equal to) to play with
...
68 | Chapter 4: Expressions and Control Flow in PHP
www
...
info
Download at Boykma
...
The four comparison operators
$a = 2; $b = 3;
if ($a > $b) echo
if ($a < $b) echo
if ($a >= $b) echo
if ($a <= $b) echo
?>
"$a
"$a
"$a
"$a
is
is
is
is
greater than $b
";
less than $b
";
greater than or equal to $b
";
less than or equal to $b
";
In this example, where $a is 2 and $b is 3, the following is output:
2 is less than 3
2 is less than or equal to 3
Try this example yourself, altering the values of $a and $b, to see the results
...
Logical operators
Logical operators produce true-or-false results, and therefore are also known as Boolean
operators
...
Table 4-4
...
Note that the ! symbol is required
by PHP in place of the word NOT
...
Example 4-16
...
...
...
(Remember that NULL—or nothing—represents a value of
FALSE
...
If you wish to experiment with this, try
out the code, giving $a and $b varying values of 1 and 0
...
it-ebooks
...
Com
When coding, remember to bear in mind that AND and OR have lower
precedence than the other versions of the operators, && and ||
...
The OR operator can cause unintentional problems in if statements, because the second
operand will not be evaluated if the first is evaluated as TRUE
...
Example 4-17
...
Example 4-18
...
OR” statement modified to ensure calling of getnext
$gn = getnext();
if ($finished == 1 OR $gn == 1) exit;
?>
In this case, the code in function getnext will be executed and the value returned stored
in $gn before the if statement
...
You should
also note that !TRUE equals FALSE and !FALSE equals TRUE
...
All possible PHP logical expressions
Inputs
Operators and results
a
b
AND
OR
XOR
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
FALSE
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
Conditionals
Conditionals alter program flow
...
Conditionals are central to dynamic web pages—the goal of using PHP in the first place—because they make it easy
to create different output each time a page is viewed
...
it-ebooks
...
Com
Figure 4-1
...
By nonlooping, I mean that the actions initiated by the statement take place and program flow then moves on, whereas looping conditionals (which
we’ll come to shortly) execute code over and over until a condition has been met
...
It’s pretty much a straight line, but now and then you encounter
various signs telling you where to go
...
If so, you drive off and follow the detour
until you return to where it started and then continue on your way in your original
direction
...
The contents of the if condition can be any valid PHP expression, including equality,
comparison, tests for zero and NULL, and even the values returned by functions (either
built-in functions or ones that you write)
...
However, you can ignore the braces if you have only a single statement to execute
...
(Note that for space and clarity, many of the examples in this
book ignore this suggestion and omit the braces for single statements
...
Conditionals | 71
www
...
info
Download at Boykma
...
An if statement with curly braces
if ($bank_balance < 100)
{
$money += 1000;
$bank_balance += $money;
}
?>
In this example, you are checking your balance to see whether it is less than 100 dollars
(or whatever your currency is)
...
(If only making money were that simple!)
If the bank balance is 100 dollars or greater, the conditional statements are ignored and
program flow skips to the next line (not shown)
...
Some people like to
place the first curly brace to the right of the conditional expression; others start a new
line with it
...
However, you will find
your code easier to read and debug if you indent each level of conditionals with a tab
...
This is
where the else statement comes in
...
What happens with an if
...
But if it’s FALSE, the second one is executed
...
Under no circumstance can both (or neither) be
executed
...
else structure
...
An if
...
it-ebooks
...
Com
Figure 4-2
...
As with if statements, if your else has only one conditional statement, you can opt to
leave out the curly braces
...
First, they
make the code easier to understand
...
)
The elseif Statement
There are also times when you want a number of different possibilities to occur, based
upon a sequence of conditions
...
As
you might imagine, it is like an else statement, except that you place a further conditional expression prior to the conditional code
...
elseif
...
Conditionals | 73
www
...
info
Download at Boykma
...
An if
...
else statement with curly braces
if ($bank_balance < 100)
{
$money += 1000;
$bank_balance += $money;
}
elseif ($bank_balance > 200)
{
$savings += 100;
$bank_balance -= 100;
}
else
{
$savings += 50;
$bank_balance -= 50;
}
?>
In the example, an elseif statement has been inserted between the if and else statements
...
Although I’m starting to stretch the metaphor a bit too far, you can imagine this as a
multiway set of detours (see Figure 4-3)
...
else or an
if
...
else statement
...
An
You may have as many elseif statements as you like
...
We’ll look at that next
...
For example, consider a PHP-driven menu system that passes a single string to the main
menu code according to what the user requests
...
The code for this written using if
...
else might look like Example 4-22
...
it-ebooks
...
Com
Figure 4-3
...
A multiple-line if
...
statement
if
elseif
elseif
elseif
elseif
?>
($page
($page
($page
($page
($page
==
==
==
==
==
"Home")
"About")
"News")
"Login")
"Links")
echo
echo
echo
echo
echo
"You
"You
"You
"You
"You
selected
selected
selected
selected
selected
Home";
About";
News";
Login";
Links";
Using a switch statement, the code might look like Example 4-23
...
A switch statement
switch ($page)
{
case "Home": echo "You selected Home";
break;
case "About": echo "You selected About";
break;
case "News": echo "You selected News";
break;
Conditionals | 75
www
...
info
Download at Boykma
...
Thereafter, the case command checks for matches
...
Of course, in a real program you would have code
here to display or jump to a page, rather than simply telling the user what was selected
...
Instead, they commence with a colon and
end with the break statement
...
Breaking out
If you wish to break out of the switch statement because a condition has been fulfilled,
use the break command
...
If you were to leave out the break commands in Example 4-23 and the case of “Home”
evaluated to be TRUE, all five cases would then be executed
...
This is deliberate
and allows for some advanced programming, but generally you should always remember to issue a break command every time a set of case conditionals has finished executing
...
Default action
A typical requirement in switch statements is to fall back on a default action if none of
the case conditions are met
...
Example 4-24
...
Generally the safest practice is to always include the break command
...
it-ebooks
...
Com
Alternative syntax
If you prefer, you may replace the first curly brace in a switch statement with a single
colon, and the final curly brace with an endswitch command, as in Example 4-25
...
Example 4-25
...
case "Links":
echo "You selected Links";
break;
endswitch;
?>
The ? Operator
One way of avoiding the verbosity of if and else statements is to use the more compact
ternary operator, ?, which is unusual in that it takes three operands rather than the
more usual two
...
The ? operator is passed an expression that it must evaluate, along with two statements
to execute: one for when the expression evaluates to TRUE, the other for when it is FALSE
...
Example 4-26
...
Otherwise, the string “There’s enough fuel” is returned
...
Conditionals | 77
www
...
info
Download at Boykma
...
Assigning a ? conditional result to a variable
$enough = $fuel <= 1 ? FALSE : TRUE;
?>
Here $enough will be assigned the value TRUE only when there is more than a gallon of
fuel; otherwise, it is assigned the value FALSE
...
It can be hard
to read, because it often mixes multiple occurrences of the same variable
...
//
...
//
...
You save the largest value in $saved and compare it to $new each time you
get a new value
...
When not used for writing compact code,
it is typically used to make some decision inline, such as when testing whether a variable
is set before passing it to a function
...
Often you may want a program to repeat the same sequence of code
again and again until something happens, such as a user inputting a value or the program reaching a natural end
...
To picture how this works, take a look at Figure 4-4
...
while Loops
Let’s turn the digital car dashboard in Example 4-26 into a loop that continuously
checks the fuel level as you drive using a while loop (Example 4-28)
...
it-ebooks
...
Com
Figure 4-4
...
A while loop
$fuel = 10;
while ($fuel > 1)
{
// Keep driving
...
By the way, if you try this example for yourself, note that it will
keep printing the string until you click the Stop button in your browser
...
For another example of a while loop that displays the 12 times table, see Example 4-29
...
A while loop to print the multiplication table for 12
$count = 1;
while ($count <= 12)
{
echo "$count times 12 is "
...
"
";
++$count;
Looping | 79
www
...
info
Download at Boykma
...
This loop will continue executing until the
variable is greater than 12
...
Inside the loop, a string is printed along with the value of $count multiplied by 12
...
Then $count is
incremented, ready for the final curly brace that tells PHP to return to the start of the
loop
...
It isn’t, but it
now has the value 2, and after another 11 times around the loop, it will have the value
13
...
If the ++$count statement (which could equally have been $count++) had not been there,
this loop would be like the first one in this section
...
But there is a much neater way this loop can be written, which I think you will like
...
Example 4-30
...
$count * 12
...
What now
happens is that PHP encounters the variable $count at the start of each iteration of the
loop and, noticing that it is prefaced with the increment operator, first increments the
variable and only then compares it to the value 12
...
If you keep the initialization at 1, only results between 2 and 12 will be
output
...
while Loops
A slight variation to the while loop is the do
...
80 | Chapter 4: Expressions and Control Flow in PHP
www
...
info
Download at Boykma
...
Example 4-31
...
while loop for printing the times table for 12
$count = 1;
do
echo "$count times 12 is "
...
"
";
while (++$count <= 12);
?>
Notice how we are back to initializing $count to 1 (rather than 0), because the code is
being executed immediately, without an opportunity to increment the variable
...
Of course, if you have more than a single statement inside a do
...
Example 4-32
...
$count * 12;
echo "
";
} while (++$count <= 12);
?>
for Loops
The final kind of loop statement, the for loop, is also the most powerful, as it combines
the abilities to set up variables as you enter the loop, test for conditions while iterating
loops, and modify variables after each iteration
...
Example 4-33
...
$count * 12
...
Each for statement takes three
parameters:
• An initialization expression
• A condition expression
Looping | 81
www
...
info
Download at Boykma
...
At the start
of the first iteration of the loop, the initialization expression is executed
...
Then, each time round the loop,
the condition expression (in this case, $count <= 12) is tested, and the loop is entered
only if the condition is TRUE
...
In the case of the times table code, the variable $count is
incremented
...
Remember to use curly braces with a for loop if it will contain more than one statement,
as in Example 4-34
...
The for loop from Example 4-33 with added curly braces
for ($count = 1 ; $count <= 12 ; ++$count)
{
echo "$count times 12 is "
...
The for loop is explicitly designed
around a single value that changes on a regular basis
...
But you can transform the variable any way you like
...
}
That’s complicated and not recommended for first-time users
...
The three parameters must be separated by semicolons
...
Thus, in the
previous example, the first and third parameters each contain two statements:
$i = 1, $j = 1
$i + $j < 1
$i++ , $j++
// Initialize $i and $j
// Terminating condition
// Modify $i and $j at the end of each iteration
The main thing to take from this example is that you must separate the three parameter
sections with semicolons, not commas (which should be used only to separate statements within a parameter section)
...
it-ebooks
...
Com
So, when is a while statement more appropriate than a for statement? When your
condition doesn’t depend on a simple, regular change to a variable
...
Breaking Out of a Loop
Just as you saw how to break out of a switch statement, you can also break out from a
for loop using the same break command
...
One case in which this might occur might be when writing a file returns an error,
possibly because the disk is full (see Example 4-35)
...
Writing a file using a for loop with error trapping
$fp = fopen("text
...
We’ll look into the file handling commands in a later chapter, but for now all
you need to know is that the first line opens the file text
...
The loop then iterates 100 times (from 0 to 99) writing the string data to the file
...
But if there is an error, the fwrite function
assigns the value FALSE
...
If you are looking to improve the code, the line:
if ($written == FALSE) break;
can be simplified using the NOT operator, like this:
if (!$written) break;
Looping | 83
www
...
info
Download at Boykma
...
So, instead of
breaking out of the whole loop, only the current iteration is exited
...
In Example 4-36, a continue statement is used to prevent a division-by-zero error from being
issued when the variable $j has a value of 0
...
Trapping division-by-zero errors using continue
$j = 10;
while ($j > −10)
{
$j--;
if ($j == 0) continue;
echo (10 / $j)
...
But for the particular case of $j being 0, the continue
statement is issued and execution skips immediately to the next iteration of the loop
...
It also automatically converts values from one type to another whenever
required
...
However, there may be times when PHP’s implicit casting is not what you want
...
By default, PHP converts
the output to floating-point so it can give the most precise value—4
...
84 | Chapter 4: Expressions and Control Flow in PHP
www
...
info
Download at Boykma
...
This expression returns a floating-point number
$a = 56;
$b = 12;
$c = $a / $b;
echo $c;
?>
But what if we had wanted $c to be an integer instead? There are various ways in which
this could be achieved; one way is to force the result of $a/$b to be cast to an integer
value using the integer cast type (int), like this:
$c = (int) ($a / $b);
This is called explicit casting
...
Otherwise,
only the variable $a would have been cast to an integer—a pointless exercise, as the
division by $b would still have returned a floating-point number
...
For example, to obtain an integer value, you could use the
intval function
...
Table 4-6
...
Each time the user clicks on something, the details can be sent back to the same
web page, which decides what to do next according to the various cookies and/or other
session details it may have stored
...
it-ebooks
...
Com
But although it is possible to build an entire website this way, it’s not recommended,
because your source code will grow and grow and start to become unwieldy, as it has
to take account of every possible action a user could take
...
For example, one distinct process is signing up for a website, along with all the checking
this entails to validate an email address, checking whether a username is already taken,
and so on
...
Then you might have a messaging module with the facility
for users to leave comments, a module containing links and useful information, another
to allow uploading of images, and so on
...
Dynamic Linking in Action
One of the more popular PHP-driven applications on the web today is the blogging
platform WordPress (see Figure 4-5)
...
Figure 4-5
...
it-ebooks
...
Com
The whole platform is held together with behind-the-scenes session tracking, so that
you hardly know when you are transitioning from one subsection to another
...
Next time you use WordPress, keep an eye on your browser’s address bar, particularly
if you are managing a blog, and you’ll notice some of the different PHP files that it uses
...
But before you do, and before proceeding with
the following chapter on functions and objects, you may wish to test your new knowledge on the following questions
...
Question 4-8
What command can you use to skip the current iteration of a loop and move on
to the next one?
Question 4-9
Why is a for loop more powerful than a while loop?
Question 4-10
How do if and while statements interpret conditional expressions of different data
types?
See the section “Chapter 4 Answers” on page 438 in Appendix A for the answers to
these questions
...
it-ebooks
...
Com
www
...
info
Download at Boykma
...
PHP has all these, plus tools like else and
elseif to make life easier
...
That’s where functions and objects come in
...
You
can pull out a section of code that you have used more than once, place it into a function,
and call the function by name when you want the code
...
Functions reduce syntax and other programming errors
...
They also decrease execution time, because each function is compiled only once,
no matter how often you call it
...
Objects take this concept a step further
...
In this chapter, you’ll learn all about using functions, from defining and calling them
to passing arguments back and forth
...
89
www
...
info
Download at Boykma
...
To use a function, call it by name
...
Otherwise, it thinks you’re
referring to a constant
...
(Things are even more confusing if there is actually a
constant named fname, in which case PHP uses its value
...
The difference is that you can omit the parentheses, as follows:
print "print doesn't require parentheses";
You do have to put parentheses after any other function you call, even
if they’re empty (that is, if you’re not passing any argument to the
function)
...
For example, phpinfo,
as shown here, displays lots of information about the current installation of PHP and
requires no argument
...
phpinfo();
The phpinfo function is extremely useful for obtaining information
about your current PHP installation, but that information could also be
very useful to potential hackers
...
Some of the built-in functions that use one or more arguments appear in Example 5-1
...
Three string functions
echo strrev("
...
Hip Hip HOORAY!
90 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
The output of PHP’s built-in phpinfo function
As you can see, the strrev function reversed the order of characters in the string,
str_repeat repeated the string “Hip ” twice (as required by a second argument), and
strtoupper converted “hooray!” to uppercase
...
]])
{
// Statements
}
I’ll explain all the square brackets, in case you find them confusing
...
• A name follows, which must start with a letter or underscore, followed by any
number of letters, numbers, or underscores
...
• One or more parameters, separated by commas, are optional
...
it-ebooks
...
Com
Function names are case-insensitive, so all of the following strings can refer to the
print function: PRINT, Print, and PrInT
...
These statements may include one or more
return statements, which force the function to cease execution and return to the calling
code
...
Returning a Value
Let’s take a look at a simple function to convert a person’s full name to lowercase and
then capitalize the first letter of each name
...
For our current function, we’ll use its counterpart: strtolower:
$lowered = strtolower("aNY # of Letters and Punctuation you WANT");
echo $lowered;
The output of this experiment is:
any # of letters and punctuation you want
We don’t want names all lowercase, though; we want the first letter of each name
capitalized
...
) Luckily, PHP also provides a ucfirst function that sets the first character of a string to uppercase:
$ucfixed = ucfirst("any # of letters and punctuation you want");
echo $ucfixed;
The output is:
Any # of letters and punctuation you want
Now we can do our first bit of program design: to get a word with its initial letter
capitalized, we call strtolower on a string first, and then ucfirst
...
Let’s see why, because it’s important to
understand the order in which code is evaluated
...
(As you saw in the previous
chapter, PHP converts the result to a string in order to display it
...
it-ebooks
...
Com
PHP is doing several things in executing that short statement:
1
...
2
...
3
...
It all works because PHP evaluates each element from the inside out
...
Example 5-2
...
$n2
...
The output from this example is:
William Henry Gates
Returning an Array
We just saw a function returning a single value
...
The first method is to return them within an array
...
Example 5-3 shows how you can
use an array to return function values
...
Returning multiple values in an array
$names = fix_names("WILLIAM", "henry", "gatES");
echo $names[0]
...
$names[2];
PHP Functions | 93
www
...
info
Download at Boykma
...
Figure 5-2
...
This concept can be hard to get your head
around, so let’s go back to the matchbox metaphor from Chapter 3
...
Now the function can follow the thread to find the data to be accessed
...
What’s more,
the function can now modify the variable’s value
...
94 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
Returning values from a function by reference
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo $a1
...
$a3
...
$a2
...
Then you call the function as before,
but put a & symbol in front of each parameter, which tells PHP to pass the variables’
references only
...
In other words, there is one group of values, but two sets of variable
names are allowed to access them
...
The output from this code is:
WILLIAM henry gatES
William Henry Gates
As you see, both of the echo statements use only the values of $a1, $a2, and $a3
...
If you need to keep the
original values, make copies of your variables and then pass the copies
by reference
...
The global keyword followed by the variable
name gives every part of your code full access to it (see Example 5-5)
...
Returning values in global variables
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
PHP Functions | 95
www
...
info
Download at Boykma
...
$a2
...
"
";
fix_names();
echo $a1
...
$a3;
function fix_names()
{
global $a1; $a1 = ucfirst(strtolower($a1));
global $a2; $a2 = ucfirst(strtolower($a2));
global $a3; $a3 = ucfirst(strtolower($a3));
}
?>
Now you don’t have to pass parameters to the function, and it doesn’t have to accept
them
...
If at all possible, in order to retain as much local scope as possible, you should try
returning arrays or using variables by association
...
Recap of Variable Scope
A quick reminder of what you know from Chapter 3:
• Local variables are accessible just from the part of code where you define them
...
If a variable is inside a function, only that function can access
the variable, and its value is lost when the function returns
...
• Static variables are accessible only within the function that declared them but retain
their value over multiple calls
...
You’ll also probably start using
libraries created by other programmers
...
You can save them
in separate files and use commands to pull them in
...
The include Statement
Using include, you can tell PHP to fetch a particular file and load all its contents
...
Example 5-6 shows how you would include a file called library
...
96 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
Including a PHP file
include "library
...
For instance, suppose that library
...
php
...
php twice
...
So you should use include_once instead (see Example 5-7)
...
Including a PHP file only once
include_once "library
...
To determine whether the file has already been
executed, the absolute file path is matched after all relative paths are resolved and the
file is found in your include path
...
That way you will never have the problem of
files being included multiple times
...
Program execution continues even if the file is not found
...
For the same reasons I gave
for using include_once, I recommend that you generally stick with require_once whenever you need to require a file (see Example 5-8)
...
Requiring a PHP file only once
require_once "library
...
it-ebooks
...
Com
// Your code goes here
?>
PHP Version Compatibility
PHP is in an ongoing process of development, and there are multiple versions
...
Example 5-9 checks for the function array_combine, which is specific to PHP version 5
...
Checking for a function’s existence
if (function_exists("array_combine"))
{
echo "Function exists";
}
else
{
echo "Function does not exist - better write our own";
}
?>
Using code such as this, you can take advantage of features in newer versions of PHP
and yet still have your code run on earlier versions, as long as you replicate any features
that are missing
...
You can also use the phpversion function to determine which version of PHP your code
is running on
...
2
...
Once you get the hang of condensing reusable bits of code into functions, it’s not that
great a leap to consider bundling the functions and their data into objects
...
One handles all user functions:
code to enable new users to sign up and to enable existing users to modify their details
...
98 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
To do this you could create a class, perhaps called User, which would contain all the
code required for handling users and all the variables needed for manipulating the data
within the class
...
You could treat this new object as if it were the actual user
...
You could even have
an instant messaging object, or one for managing whether two users are friends
...
Each new object based on this class is called an instance (or occurrence) of that class
...
In defining a class, you supply the names of its properties and the code
for its methods
...
Think of the CDs
that it holds in the carousel as its properties; the method of playing them is to press
buttons on the front panel
...
Figure 5-3
...
it-ebooks
...
Com
When creating objects, it is best to use encapsulation, or writing a class in such a way
that only its methods can be used to manipulate its properties
...
The methods you supply are known as the
object’s interface
...
Additionally, when you want to upgrade a program, if you have used proper encapsulation and maintained the same interface, you can simply develop new replacement
classes, debug them fully, and then swap them in for the old ones
...
Once you have created a class, you may find that you need another class that is similar
to it but not quite the same
...
When you do this, your new class has all the properties of the one it
has inherited from
...
In our jukebox example, if you invent a new jukebox that can play a video along with
the music, you can inherit all the properties and methods from the original jukebox
superclass and add some new properties (videos) and new methods (a movie player)
...
Declaring a Class
Before you can use an object, you must define a class with the class keyword
...
Example 5-10 defines the class User with two properties: $name and
$password (indicated by the public keyword—see “Property and Method Scope in PHP
5” on page 107
...
Example 5-10
...
it-ebooks
...
Com
Here I have also used an invaluable function called print_r
...
The _r stands for “in human
readable format
...
Creating an Object
To create an object with a specified class, use the new keyword, like this: object = new
Class
...
In the second, we pass
parameters to the call
...
Accessing Objects
Let’s add a few lines more to Example 5-10 and check the results
...
Example 5-11
...
it-ebooks
...
Com
}
?>
function save_user()
{
echo "Save User code goes here";
}
As you can see, the syntax for accessing an object’s property is $object->property
...
You should note that the example property and method do not have $ signs in front of
them
...
For example, the expression
$object->$property would attempt to look up the value assigned to a variable named
$property (let’s say that value is the string “brown”) and then attempt to reference
the property $object->brown
...
When looked at using a browser’s View Source facility, the output from Example 5-11 is:
User Object
(
[name] =>
[password] =>
)
User Object
(
[name] => Joe
[password] => mypass
)
Save User code goes here
Again, print_r shows its utility by providing the contents of $object before and after
property assignment
...
You can also see that the code in the method save_user was executed via the call to
that method
...
You can place functions and class definitions anywhere in your code,
before or after statements that use them
...
Cloning objects
Once you have created an object, it is passed by reference when you pass it as a parameter
...
102 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
You’ll see how this works in Example 5-12, where we define a very simple User class
with no methods and only the property name
...
Copying an object
$object1 = new User();
$object1->name = "Alice";
$object2 = $object1;
$object2->name = "Amy";
echo "object1 name = "
...
"
";
echo "object2 name = "
...
Then we create $object2, assigning it the value of $object1, and assign the value “Amy”
just to the name property of $object2—or so we might think
...
To avoid this confusion, you can use the clone operator, which creates a new instance
of the class and copies the property values from the original class to the new instance
...
Example 5-13
...
$object1->name
...
$object2->name;
class User
{
public $name;
}
?>
Voilà! The output from this code is what we initially wanted:
PHP Objects | 103
www
...
info
Download at Boykma
...
These are passed to a special method within the class, called the constructor, which
initializes various properties
...
Example 5-14
...
Example 5-15
...
This ability is useful when
code has made the last reference to an object or when a script reaches the end
...
Example 5-16
...
it-ebooks
...
Com
}
?>
}
// Destructor code goes here
Writing Methods
As you have seen, declaring a method is similar to declaring a function, but there are a
few differences
...
You also have access to a special variable called $this, which can be used to access the
current object’s properties
...
Example 5-17
...
Note how the preceding $ of the
property $password is omitted when using the -> operator
...
Here’s how you would use the class defined in Example 5-17:
$object = new User;
$object->password = "secret";
echo $object->get_password();
This code prints the password “secret”
...
A static method has no access to any object
properties and is created and accessed as in Example 5-18
...
Creating and accessing a static method
User::pwd_string();
PHP Objects | 105
www
...
info
Download at Boykma
...
Static functions are useful for
performing actions relating to the class itself, but not to specific instances of the class
...
If you try to access $this->property, or other object properties from
within a static class, you will receive an error message
...
To illustrate this, in Example 5-19 the class User has no properties and no methods but is legal code
...
Defining a property implicitly
$object1 = new User();
$object1->name = "Alice";
echo $object1->name;
class User {}
?>
This code correctly outputs the string “Alice” without a problem, because PHP implicitly declares the variable $object1->name for you
...
To help yourself and anyone else who will maintain your code, I advise that you get
into the habit of always declaring your properties explicitly within classes
...
Also, when you declare a property within a class, you may assign a default value to it
...
Example 5-20 shows a few valid and invalid assignments
...
it-ebooks
...
Com
Example 5-20
...
The generally accepted practice is to use uppercase
letters to make them stand out, as in Example 5-21
...
Defining constants within a class
Translate::lookup();
class Translate
{
const ENGLISH
const SPANISH
const FRENCH
const GERMAN
//
...
Note that this code calls the class directly, using the double colon operator at line
one, without creating an instance of it first
...
Remember that once you define a constant, you can’t change it
...
PHP Objects | 107
www
...
info
Download at Boykma
...
Methods are assumed to be public by default
...
private
These members can be referenced only by methods within the same class—not by
subclasses
...
• Use protected when outside code should not access this member but extending
classes should inherit it
...
Example 5-22 illustrates the use of these keywords
...
Changing property and method scope
class Example
{
var $name = "Michael";
public $age = 23;
protected $usercount;
}
?>
// Same as public but deprecated
// Public property
// Protected property
private function admin() // Private method
{
// Admin code goes here
}
Static properties and methods
Most data and methods apply to instances of a class
...
These facts and operations apply separately to each user and therefore
use instance-specific properties and methods
...
For instance, to
report how many users are registered, you will store a variable that applies to the whole
User class
...
108 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
A property declared static cannot be
directly accessed within an instance of a class, but a static method can
...
Example 5-23
...
Test::$static_property
...
$temp->get_sp()
...
$temp->static_property
...
Also, Test B could obtain
its value by calling the get_sp method of the object $temp, created from class Test
...
Note how the method get_sp accesses $static_property using the keyword self
...
Inheritance
Once you have written a class, you can derive subclasses from it
...
This is achieved
using the extends operator
...
PHP Objects | 109
www
...
info
Download at Boykma
...
Inheriting and extending a class
$object
=
$object->name
=
$object->password =
$object->phone
=
$object->email
=
$object->display();
new Subscriber;
"Fred";
"pword";
"012 345 6789";
"fred@bloggs
...
...
...
"
";
$this->password
...
"
";
$this->email;
The original User class has two properties, $name and $password, and a method to save
the current user to the database
...
The output from this code is:
Name:
Pass:
Phone:
Email:
Fred
pword
012 345 6789
fred@bloggs
...
Sometimes this is not the behavior
you want and you need to access the parent’s method
...
110 | Chapter 5: PHP Functions and Objects
www
...
info
Download at Boykma
...
Overriding a method and using the parent operator
$object = new Son;
$object->test();
$object->test2();
class Dad
{
function test()
{
echo "[Class Dad] I am your Father
";
}
}
class Son extends Dad
{
function test()
{
echo "[Class Son] I am Luke
";
}
}
?>
function test2()
{
parent::test();
}
This code creates a class called Dad and then a subclass called Son that inherits its properties and methods, then overrides the method test
...
The only way to execute the overridden
test method in the Dad class is to use the parent operator, as shown in function test2
of class Son
...
To be certain
that all initialization code is executed, subclasses should always call the parent constructors, as in Example 5-26
...
it-ebooks
...
Com
Example 5-26
...
";
echo "Fur: "
...
"
";
echo "Stripes: "
...
The Wildcat class
has created the property $fur, which we’d like to reuse, so we create the Tiger class to
inherit $fur and additionally create another property, $stripes
...
Fur: TRUE
Stripes: TRUE
Final methods
In cases in which you wish to prevent a subclass from overriding a superclass method,
you can use the final keyword
...
Example 5-27
...
it-ebooks
...
Com
Once you have digested the contents of this chapter, you should have a strong feel for
what PHP can do for you
...
In Chapter 6, we’ll finish off our initial exploration
of PHP by looking at the workings of PHP arrays
...
Test Your Knowledge: Questions | 113
www
...
info
Download at Boykma
...
it-ebooks
...
Com
CHAPTER 6
PHP Arrays
In Chapter 3, I gave a very brief introduction to PHP’s arrays—just enough for a little
taste of their power
...
Arrays are an example of what has made PHP so popular
...
Basic Access
We’ve already looked at arrays as if they were clusters of matchboxes glued together
...
They are like bead strings,
because each element has its own location and (with the exception of the first and last
ones) each has other elements on either side
...
Built-in functions let you sort them, add or remove sections, and walk through them
to handle each item through a special kind of loop
...
Numerically Indexed Arrays
Let’s assume that you’ve been tasked with creating a simple website for a local office
supplies company and you’re currently working on the section devoted to paper
...
You can see the simplest way of doing so in Example 6-1
...
it-ebooks
...
Com
Example 6-1
...
The familiar print_r
function (which prints out the contents of a variable, array, or object) is used to verify
that the array has been correctly populated
...
But, as you can see, that approach
requires extra typing and makes your code harder to maintain if you want to insert or
remove supplies from the array
...
Example 6-2
...
Example 6-3
...
it-ebooks
...
Com
for ($j = 0 ; $j < 4 ; ++$j)
echo "$j: $paper[$j]
";
?>
This example prints out the following:
0:
1:
2:
3:
Copier
Inkjet
Laser
Photo
So far, you’ve seen a couple of ways in which you can add items to an array and one
way of referencing them, but PHP offers many more—which I’ll get to shortly
...
Associative Arrays
Keeping track of array elements by index works just fine, but can require extra work
in terms of remembering which number refers to which product
...
This is where associative arrays come into their own
...
Example 6-4 expands on the
previous code by giving each element in the array an identifying name and a longer,
more explanatory string value
...
Adding items to an associative array and retrieving them
$paper['copier']
$paper['inkjet']
$paper['laser']
$paper['photo']
=
=
=
=
"Copier & Multipurpose";
"Inkjet Printer";
"Laser Printer";
"Photographic Paper";
echo $paper['laser'];
?>
In place of a number (which doesn’t convey any useful information, aside from the
position of the item in the array), each item now has a unique name that you can use
to reference it elsewhere, as with the echo statement—which simply prints out Laser
Printer
...
This very powerful feature of PHP is often used when extracting information from XML
and HTML
...
body of web page
...
it-ebooks
...
Com
The program would also probably break down all the links found within a page into
another array, and all the headings and subheadings into another
...
Assignment Using the array Keyword
So far, you’ve seen how to assign values to arrays by just adding new items one at a
time
...
A more compact and faster assignment method uses the array keyword
...
Example 6-5
...
$p1[2]
...
$p2['inkjet']
...
There are four items, so they will occupy slots 0 through 3
...
The use of => is similar to
the regular = assignment operator, except that you are assigning a value to an index and
not to a variable
...
The echo command therefore prints out:
p2 element: Inkjet Printer
You can verify that $p1 and $p2 are different types of array, because both of the following
commands, when appended to the code, will cause an “undefined index” or “undefined
offset” error, as the array identifier for each is incorrect:
echo $p1['inkjet']; // Undefined index
echo $p2['3'];
// Undefined offset
118 | Chapter 6: PHP Arrays
www
...
info
Download at Boykma
...
as Loop
The creators of PHP have gone to great lengths to make the language easy to use
...
as loop
...
The process starts with the first item and ends with the last one, so you don’t even have
to know how many items there are in an array
...
Example 6-6
...
as
$paper = array("Copier", "Inkjet", "Laser", "Photo");
$j = 0;
foreach ($paper as $item)
{
echo "$j: $item
";
++$j;
}
?>
When PHP encounters a foreach statement, it takes the first item of the array and places
it in the variable following the as keyword, and each time control flow returns to the
foreach, the next array element is placed in the as keyword
...
Once all values have
been used, execution of the loop ends
...
Now let’s see how foreach works with an associative array by taking a look at Example 6-7, which is a rewrite of the second half of Example 6-5
...
Walking through an associative array using foreach
...
Instead, each item of the array $paper is fed into the key and
value pair of variables $item and $description, from where they are printed out
...
as Loop | 119
www
...
info
Download at Boykma
...
as, you can use the list function in conjunction
with the each function, as in Example 6-8
...
Walking through an associative array using each and list
$paper = array('copier'
'inkjet'
'laser'
'photo'
=>
=>
=>
=>
"Copier & Multipurpose",
"Inkjet Printer",
"Laser Printer",
"Photographic Paper");
while (list($item, $description) = each($paper))
echo "$item: $description
";
?>
In this example, a while loop is set up and will continue looping until the each function
returns a value of FALSE
...
When there are no more pairs to return, each returns FALSE
...
You can see how list works a little more clearly in Example 6-9, where an array is
created out of the two strings “Alice” and “Bob” and then passed to the list function,
which assigns those strings as values to the variables $a and $b
...
Using the list function
list($a, $b) = array('Alice', 'Bob');
echo "a=$a b=$b";
?>
The output from this code is:
a=Alice b=Bob
So you can take your pick when walking through arrays
...
as to create a
loop that extracts values to the variable following the as, or use the each function and
create your own looping system
...
it-ebooks
...
Com
Multidimensional Arrays
A simple design feature in PHP’s array syntax makes it possible to create arrays of more
than one dimension
...
And that feature is the ability to include an entire array as a part of another one, and
to be able to keep on doing so, just like the old rhyme: “Big fleas have little fleas upon
their backs to bite ’em
...
”
Let’s look at how this works by taking the associative array in the previous example
and extending it—see Example 6-10
...
Creating a multidimensional associative array
$products = array(
'paper' =>
array(
'copier' => "Copier & Multipurpose",
'inkjet' => "Inkjet Printer",
'laser' => "Laser Printer",
'photo' => "Photographic Paper"),
'pens' => array(
'ball'
=> "Ball Point",
'hilite' => "Highlighters",
'marker' => "Markers"),
'misc' => array(
'tape'
=> "Sticky Tape",
'glue'
=> "Adhesives",
'clips' => "Paperclips") );
echo "
";";
foreach ($products as $section => $items)
foreach ($items as $key => $value)
echo "$section:\t$key\t($value)
";
echo "
?>
To make things clearer now that the code is starting to grow, I’ve renamed some of the
elements
...
Within this array there are three
items: paper, pens, and misc, and each of these contains another array with key/value
pairs
...
For example,
under ball there might be many different types and colors of ballpoint pens available
in the online store
...
Multidimensional Arrays | 121
www
...
info
Download at Boykma
...
as loops to print
out the various values
...
As long as you remember that each level of the array works the same way (it’s a key/
value pair), you can easily write code to access any element at any level
...
Although tabs are not normally significant to the web browser, I let them be used for
layout by using the
...
The output from this code looks like the following:
paper:
paper:
paper:
paper:
pens:
pens:
pens:
misc:
misc:
misc:
copier
inkjet
laser
photo
ball
hilite
marker
tape
glue
clips
(Copier & Multipurpose)
(Inkjet Printer)
(Laser Printer)
(Photographic Paper)
(Ball Point)
(Highlighters)
(Markers)
(Sticky Tape)
(Adhesives)
(Paperclips)
You can directly access a particular element of the array using square brackets, like this:
echo $products['misc']['glue'];
which outputs the value “Adhesives”
...
Example 6-11 creates the board for a
chess game with the pieces in their starting positions
...
Creating a multidimensional numeric array
$chessboard = array(
array('r', 'n', 'b',
array('p', 'p', 'p',
array(' ', ' ', ' ',
array(' ', ' ', ' ',
array(' ', ' ', ' ',
array(' ', ' ', ' ',
array(' ', ' ', ' ',
array(' ', ' ', ' ',
array('P', 'P', 'P',
array('R', 'N', 'B',
'k',
'p',
' ',
' ',
' ',
' ',
' ',
' ',
'P',
'K',
echo "";
foreach ($chessboard as $row)
{
foreach ($row as $piece)
122 | Chapter 6: PHP Arrays
'q',
'p',
' ',
' ',
' ',
' ',
' ',
' ',
'P',
'Q',
'b',
'p',
' ',
' ',
' ',
' ',
' ',
' ',
'P',
'B',
'n',
'p',
' ',
' ',
' ',
' ',
' ',
' ',
'P',
'N',
'r'),
'p'),
' '),
' '),
' '),
' '),
' '),
' '),
'P'),
'R'));
www
...
info
Download at Boykma
...
The key is r=rook, n=knight, b=bishop, k=king, q=queen, and p=pawn
...
as loops walk through the array and display its contents
...
This loop has two statements within
it, so curly braces enclose them
...
This loop has a single
statement, so curly braces are not required to enclose it
...
Using Array Functions
You’ve already seen the list and each functions, but PHP comes with numerous other
functions for handling arrays
...
net/manual/en/ref
...
php
...
is_array()
Arrays and variables share the same namespace
...
If you’re in doubt and your
code needs to check whether a variable is an array, you can use the is_array function
like this:
echo (is_array($fred)) ? "Is an array" : "Is not an array";
Using Array Functions | 123
www
...
info
Download at Boykma
...
count()
Although the each function and foreach
...
To count
all the elements in the top level of an array, use a command such as the following:
echo count($fred);
Should you wish to know how many elements there are altogether in a multidimensional array, you can use a statement such as:
echo count($fred, 1);
The second parameter is optional and sets the mode to use
...
sort()
Sorting is so common that PHP provides a built-in function
...
Instead it returns TRUE on success and FALSE
on error and also supports a few flags, but the main two that you might wish to use
force sorting to be made either numerically or as strings, like this:
sort($fred, SORT_NUMERIC);
sort($fred, SORT_STRING);
You can also sort an array in reverse order using the rsort function, like this:
rsort($fred, SORT_NUMERIC);
rsort($fred, SORT_STRING);
shuffle()
There may be times when you need the elements of an array to be put in random order,
such as when creating a game of playing cards:
shuffle($cards);
Like sort, shuffle acts directly on the supplied array and returns TRUE on success or
FALSE on error
...
it-ebooks
...
Com
explode()
This is a very useful function with which you can take a string containing several items
separated by a single character (or string of characters) and then place each of these
items into an array
...
Example 6-12
...
Example 6-13 shows a slight variation
...
Exploding a string delimited with *** into an array
$temp = explode('***', "A***sentence***with***asterisks");
print_r($temp);
?>
The code in Example 6-13 prints out the following:
Array
(
[0]
[1]
[2]
[3]
)
=>
=>
=>
=>
A
sentence
with
asterisks
extract()
Sometimes it can be convenient to turn the key/value pairs from an array into PHP
variables
...
Using Array Functions | 125
www
...
info
Download at Boykma
...
If the variables were sent using the GET method, they
will be placed in an associative array called $_GET, and if they were sent using POST, they
will be placed in an associative array called $_POST
...
However, sometimes you just want to store the values sent into variables for later use
...
Be careful with this approach, though, because if any extracted variables conflict with
ones that you have already defined, your existing values will be overwritten
...
I strongly recommend that you use this
version of the function when handling the $_GET and $_POST arrays, or any other array
whose keys could be controlled by the user, because malicious users could submit keys
chosen deliberately to overwrite commonly used variable names and compromise your
website
...
Example 6-14 shows how you might use this
function
...
Using the compact function
$fname
$sname
$address
$city
$country
=
=
=
=
=
"Elizabeth";
"Windsor";
"Buckingham Palace";
"London";
"United Kingdom";
$contact = compact('fname', 'sname', 'address', 'city', 'country');
print_r($contact);
?>
The result of running Example 6-14 is:
Array
(
126 | Chapter 6: PHP Arrays
www
...
info
Download at Boykma
...
This is because compact is looking for an array of
variable names
...
Example 6-15
...
If you copy and paste the print_r line of code, you only need to alter the variables
named there for a quick print out of a group of variables’ values
...
as construct or the each function walk through an array, they keep
an internal PHP pointer that makes a note of which element of the array they should
return next
...
Examples of how to use this function
are:
reset($fred);
// Throw away return value
$item = reset($fred); // Keep first element of the array in $item
Using Array Functions | 127
www
...
info
Download at Boykma
...
In the next chapter,
we’ll look at using PHP for common, practical tasks
...
128 | Chapter 6: PHP Arrays
www
...
info
Download at Boykma
...
This chapter builds on
your new programming skills to teach you some common but important practical tasks
...
You’ll also find out how to create and otherwise modify files,
including those uploaded by users
...
Together these topics will extend your understanding of both practical PHP programming and developing international web standards
...
But a much more powerful function, printf, controls the format of the output
by letting you put special formatting characters in a string
...
For instance, the following example uses the %d conversion
specifier to display the value 3 in decimal:
printf("There are %d items in your basket", 3);
If you replace the %d with %b, the value 3 would be displayed in binary (11)
...
129
www
...
info
Download at Boykma
...
The printf conversion specifiers
Specifier
Conversion action on argument arg
Example (for an arg of 123)
%
Display a % character (no arg is required)
%
b
Display arg as a binary integer
1111011
c
Display ASCII character for the arg
{
d
Display arg as a signed decimal integer
123
e
Display arg using scientific notation
1
...
000000
o
Display arg as an octal integer
173
s
Display arg as a string
123
u
Display arg as an unsigned decimal
123
x
Display arg in lowercase hexadecimal
7b
X
Display arg in uppercase hexadecimal
7B
You can have as many specifiers as you like in a printf function, as long as you pass a
matching number of arguments, and as long as each specifier is prefaced by a % symbol
...
I’m 33 years
old, which is 21 in hexadecimal”:
printf("My name is %s
...
A more practical example of printf sets colors in HTML using decimal
...
An easy solution is:
printf("Hello", 65, 127, 245);
Check the format of the color specification between the apostrophes ('') carefully
...
Then come three %X
format specifiers, one for each of your numbers
...
For instance, if you stored values for your colors in the three variables $r, $g,
and $b, you could create a darker color with:
printf("Hello", $r-20, $g-20, $b-20);
130 | Chapter 7: Practical PHP
www
...
info
Download at Boykma
...
For example, amounts of currency are usually displayed with only two
digits of precision
...
42/12, which results in 10
...
To ensure that such values are
correctly stored internally, but displayed with only two digits of precision, you can
insert the string “
...
2f", 123
...
29
But you actually have even more control than that, because you can also specify whether
to pad output with either zeros or spaces by prefacing the specifier with certain values
...
Example 7-1
...
42 / 12);
// Pad to 15 spaces, fill with zeros
printf("The result is $%015f\n", 123
...
2f\n", 123
...
2f\n", 123
...
2f\n", 123
...
285000
$00000010
...
29
$000000000010
...
29
The way it works is simple if you go from right to left (see Table 7-2)
...
In this case, it is f for floating
point
...
Using printf | 131
www
...
info
Download at Boykma
...
In the
previous example, this is 15 characters
...
• The leftmost parameter allowed before the % symbol is a 0, which is ignored unless
a padding value has been set, in which case the output is padded with zeros instead
of spaces
...
• On the left is the % symbol, which starts the conversion
...
Conversion specifier components
Start conversion
Pad character
Number of pad
characters
%
Display
precision
15
Conversion
specifier
Examples
f
10
...
4
f
000000000010
...
2
f
########10
...
Example 7-2 shows various examples
...
String padding
echo ""; // Enables viewing of the spaces"; // Terminates pre tag
$h = 'House';
printf("[%s]\n",
printf("[%10s]\n",
printf("[%-10s]\n",
printf("[%010s]\n",
printf("[%'#10s]\n\n",
$h);
$h);
$h);
$h);
$h);
//
//
//
//
//
Standard string output
Right justify with spaces
Left justify with spaces
Zero padding
Use the custom padding character '#'
$d = 'Doctor House';
printf("[%10
...
6s]\n",
$d); // Left justify, cutoff of 6 characters
printf("[%-'@10
...
The output from this example is as follows:
132 | Chapter 7: Practical PHP
www
...
info
Download at Boykma
...
Table 7-3 shows a breakdown of the components available to string conversion
specifiers
...
String conversion specifier components
Start
conversion
Left or right
justify
Padding
character
Number of pad
characters
Cutoff
%
Conversion
specifier
Examples
s
%
-
%
'#
8
...
This is where the sprintf function comes in
...
You might use it simply to make a conversion, as in the following example, which
returns the hexadecimal string value for the RGB color group 65, 127, 245 in
$hexstring:
$hexstring = sprintf("%X%X%X", 65, 127, 245);
Or you may wish to store output ready to display later on:
$out = sprintf("The result is: $%
...
42 / 12);
echo $out;
Date and Time Functions
To keep track of the date and time, PHP uses standard Unix timestamps, which are
simply the number of seconds since the start of January 1, 1970
...
it-ebooks
...
Com
Because the value is stored as seconds, to obtain the timestamp for this time next week,
you would use the following, which adds 7 days × 24 hours × 60 minutes × 60 seconds
to the returned value:
echo time() + 7 * 24 * 60 * 60;
If you wish to create a timestamp for a given date, you can use the mktime function
...
1
...
Well,
it’s because the original developers of Unix chose the start of the year
1970 as the base date that no programmer should need to go before!
Luckily, because as of version 5
...
0, PHP supports systems using a
signed 32-bit integer for the timestamp, dates 1901 to 2038 are allowed
on them
...
We have to
hope it will all be solved well before we get too close to that date
...
The format is as
follows:
date($format, $timestamp);
The parameter $format should be a string containing formatting specifiers as detailed
in Table 7-4 and $timestamp should be a Unix timestamp
...
net/manual/en/function
...
php
...
it-ebooks
...
Com
Table 7-4
...
it-ebooks
...
Com
Date Constants
There are a number of useful constants that you can use with the date command to
return the date in specific formats
...
Some of the more commonly used
constants are:
DATE_ATOM
This is the format for Atom feeds
...
DATE_COOKIE
This is the format for cookies set from a web server or JavaScript
...
DATE_RSS
This is the format for RSS feeds
...
DATE_W3C
This is the format for “World Wide Web Consortium
...
The complete list can be found at http://php
...
datetime
...
Using checkdate
You’ve seen how to display a valid date in a variety of formats
...
For example, if February 30 of any year is input, it will always be an invalid date
...
As it stands, it will find the given
date invalid
...
Checking for the validity of a date
$month = 9;
$day
= 31;
$year = 2012;
// September (only has 30 days)
// 31st
// 2012
if (checkdate($month, $day, $year)) echo "Date is valid";
else echo "Date is invalid";
?>
136 | Chapter 7: Practical PHP
www
...
info
Download at Boykma
...
Sometimes it can be quicker and more convenient to directly access
files on the hard disk
...
First, though, a note about file naming
...
For example, Windows and Mac OS X filenames are not case-sensitive, but
Linux and Unix ones are
...
Checking Whether a File Exists
To determine whether a file already exists, you can use the file_exists function, which
returns either TRUE or FALSE, and is used like this:
if (file_exists("testfile
...
txt doesn’t exist, so let’s create it and write a few lines to it
...
php
...
Creating a simple text file
...
txt", 'w') or die("Failed to create file");
$text = <<<_END
Line 1
Line 2
Line 3
_END;
fwrite($fh, $text) or die("Could not write to file");
fclose($fh);
echo "File 'testfile
...
txt’ written successfully”
...
Otherwise, the file testfile
...
php program
...
it-ebooks
...
Com
Line 1
Line 2
Line 3
This simple example shows the sequence that all file handling takes:
1
...
This is done through a call to fopen
...
Then you can call other functions; here we write to the file (fwrite), but you can
also read from an existing file (fread or fgets) and do other things
...
Finish by closing the file (fclose)
...
Every open file requires a file resource so that PHP can access and manage it
...
Thereafter, each file handling function that accesses the opened file, such as fwrite or fclose, must be passed $fh as a parameter to
identify the file being accessed
...
Upon failure, FALSE will be returned by fopen
...
A web application would never abort in this crude
way (you would create a web page with an error message instead), but this is fine for
our testing purposes
...
It is simply the character w, which tells
the function to open the file for writing
...
Be careful when playing around with these functions: if the file already exists, the
w mode parameter causes the fopen call to delete the old contents (even if you don’t
write anything new!)
...
Table 7-5
...
Return
FALSE if the file doesn’t already exist
...
Return
FALSE if the file doesn’t already exist
...
If the file doesn’t exist, attempt to create it
...
If the file doesn’t exist, attempt to create it
...
it-ebooks
...
Com
Mode
Action
Description
'a'
Append to file end
Open for writing only; place the file pointer at the end of the file
...
'a+'
Append to file end and allow reading
Open for reading and writing; place the file pointer at the end of the file
...
Reading from Files
The easiest way to read from a text file is to grab a whole line through fgets (think of
the final s as standing for “string”), as in Example 7-5
...
Reading a file with fgets
$fh = fopen("testfile
...
Example 7-6
...
txt", 'r') or
die("File does not exist or you lack permission to open it");
$text = fread($fh, 3);
fclose($fh);
echo $text;
?>
I’ve requested three characters in the fread call, so the program displays the following:
Lin
The fread function is commonly used with binary data
...
Copying Files
Let’s try out the PHP copy function to create a clone of testfile
...
Type in Example 7-7 and save it as copyfile
...
File Handling | 139
www
...
info
Download at Boykma
...
Copying a file
...
txt', 'testfile2
...
txt'";
?>
If you check your folder again, you’ll see that you now have the new file testfile2
...
By the way, if you don’t want your programs to exit on a failed copy attempt, you
could try the alternate syntax in Example 7-8
...
Alternate syntax for copying a file
...
txt', 'testfile2
...
txt'";
?>
Moving a File
To move a file, rename it with the rename function, as in Example 7-9
...
Moving a file
...
txt', 'testfile2
...
new'";
?>
You can use the rename function on directories, too
...
Deleting a File
Deleting a file is just a matter of using the unlink function to remove it from the file
system, as in Example 7-10
...
Deleting a file
...
new')) echo "Could not delete file";
else echo "File 'testfile2
...
For example, if you are deleting a file based on user input, you
must make absolutely certain it is a file that can be safely deleted and
that the user is allowed to delete it
...
it-ebooks
...
Com
As with moving a file, a warning message will be displayed if the file doesn’t exist, which
you can avoid by using file_exists to first check for its existence before calling unlink
...
You can use one of the append write modes (see Table 7-5), or you can simply open a
file for reading and writing with one of the other modes that supports writing, and
move the file pointer to the correct place within the file that you wish to write to or
read from
...
It is not the same as the file handle (as stored in the
variable $fh in Example 7-4), which contains details about the file being accessed
...
php
...
Example 7-11
...
php
$fh = fopen("testfile
...
txt' successfully updated";
?>
What this program does is open testfile
...
It then uses the fgets
function to read in a single line from the file (up to the first line feed)
...
The resulting file now looks like this:
Line
Line
Line
Line
1
2
3
1
The first line has successfully been copied and then appended to the file’s end
...
The SEEK_END tells the function to move the file pointer to
the end of the file and the 0 parameter tells it how many positions it should then be
moved backward from that point
...
File Handling | 141
www
...
info
Download at Boykma
...
The SEEK_SET option tells the function to set the file pointer to the exact
position given by the preceding parameter
...
Therefore, if the file pointer is currently at position 18, the following call will move it
to position 23:
fseek($fh, 5, SEEK_CUR);
Although this is not recommended unless you have very specific reasons for it, it is even
possible to use text files such as this (but with fixed line lengths) as simple flat-file
databases
...
Records can also be deleted by overwriting
them with zero characters, and so on
...
If more than one person
tries to write to a file simultaneously, it can become corrupted
...
To handle simultaneous users, it’s necessary to use the file locking
flock function
...
So, whenever your programs use write access on files that
may be accessed concurrently by multiple users, you should also add file locking to
them, as in Example 7-12, which is an updated version of Example 7-11
...
Updating a file with file locking
$fh = fopen("testfile
...
txt' successfully updated";
?>
There is a trick to file locking to preserve the best possible response time for your
website visitors: perform it directly before you make a change to a file, and then unlock
it immediately afterward
...
This is why the calls to flock in Example 7-12 are
directly before and after the fwrite call
...
it-ebooks
...
Com
The first call to flock sets an exclusive file lock on the file referred to by $fh using the
LOCK_EX parameter:
flock($fh, LOCK_EX);
From this point onward, no other processes can write to (or even read from) the file
until the lock is released by using the LOCK_UN parameter, like this:
flock($fh, LOCK_UN);
As soon as the lock is released, other processes are allowed access again to the file
...
However, did you notice that the call to request an exclusive lock is nested as part of
an if statement? This is because flock is not supported on all systems and therefore it
is wise to check whether you successfully secured a lock, just in case one could not be
obtained
...
This means that it locks out only other processes that call the function
...
By the way, implementing file locking and then accidentally leaving it out in one section
of code can lead to an extremely hard-to-locate bug
...
Also, when using a multithreaded server like
ISAPI, you may not be able to rely on flock to protect files against other
PHP scripts running in parallel threads of the same server instance
...
Reading an Entire File
A handy function for reading in an entire file without having to use file handles is
file_get_contents
...
Example 7-13
...
txt");
echo "
?>
File Handling | 143
www
...
info
Download at Boykma
...
The O’Reilly home page grabbed with file_get_contents
But the function is actually a lot more useful than that, because you can also use it to
fetch a file from a server across the Internet, as in Example 7-14, which requests the
HTML from the O’Reilly home page, and then displays it as if the page itself had been
surfed to
...
Example 7-14
...
com");
?>
Uploading Files
Uploading files to a web server is a subject area that seems daunting to many people,
but it actually couldn’t be much easier
...
To see how this works, type in the program in Example 7-15 and save
it as upload
...
When you run it, you’ll see a form in your browser that lets you upload
a file of your choice
...
it-ebooks
...
Com
Example 7-15
...
php
...
php' enctype='multipart/form-data'>
Select File:
_END;
if ($_FILES)
{
$name = $_FILES['filename']['name'];
move_uploaded_file($_FILES['filename']['tmp_name'], $name);
echo "Uploaded image '$name'";
}
echo "