PHP Crash Course
Macq Electronique, Brussels 2010
Michelangelo van Dam
Targeted audience
experience with development languages
knowledge about programming routines
types and functions
this is not “development for newbies” !
Michelangelo van Dam
• Independent Consultant
• Zend Certified Engineer (ZCE)
- PHP 4 & PHP 5
- Zend Framework
• Co-Founder of PHPBenelux
• Shepherd of “elephpant” herdes
T AIL O RM A D E S O L U T I O N S
Macq électronique, manufacturer and developer, proposes
you a whole series of electronic and computing-processing
solutions for industry, building and road traffic.
Macq électronique has set itself two objectives which are
essential for our company :
developing with competence and innovation
earning the confidence of our customers
Macq électronique presents many references carried out
the last few years which attest to its human and
technical abilities to meet with the greatest efficiency
the needs of its customers.
For more information, please check out our website
http://www.macqel.eu
What is PHP ?
• most popular language for dynamic web sites
• open-source (part of popularity)
•- pre-processed programming language
no need to compile
• simple to learn (low entry level)
• easy to shoot yourself in your foot ! (no kidding)
PHP is a “Ball of nails”
“When I say that PHP is a
ball of nails, basically, PHP is
just this piece of shit that
you just put together—put
all the parts together—and
you throw it against the wall
and it fucking sticks.”
Terry Chay
History of PHP
•- 1995: Rasmus Lerdorf created PHP
for maintaining his own resume on the web
- called it “Personal Home Page”
- improved it with a Form interpreter (PHP-FI)
• 1997: Zeev Zuraski and Andi Gutmans
- rewrote first parser for PHP v3
- renamed it “PHP: Hypertext Preprocessor”
• 1998: Zeev Zuraski and Andi Gutmans
- redesigned the parser for PHP 4 (Zend Engine)
- founded Zend Technologies, Inc.
Seriously, who uses PHP ?
“PHP is currently the most
popular server-side web
programming language. It runs
33,53%˙ of the websites on the
Internet.”
Source: wheel.troxo.com
˙ data from 2007 !!!
PHP powers adult websites !!!
Starting with PHP
•- Minimum Requirements:
php hypertext preprocessor (www.php.net)
- a text editor (notepad, textpad, vi, pico, emacs, …)
• Preferred requirements:
- LAMP: Linux, Apache, MySQL, PHP
- WAMP: Windows, Apache, MySQL, PHP
- WIMP: Windows, IIS, MS SQL, PHP
- SPAM: Solaris, PHP, Apache, MySQL
- Mac OS X
My first PHP code
Put the following code in file “helloWorld.php”:
<?php
echo 'Hello World';
?>
To execute this code you can just use
user@server: $ /usr/local/zend/bin/php ./helloWorld.php
And it will output
Hello Worlduser@server: $
Escape from HTML
Simple escaping:
<p>This is going to be ignored.</p>
<?php echo 'While this is going to be parsed.'; ?>
<p>This will also be ignored.</p>
Advanced escaping:
<?php
if ($expression) {
?>
<strong>This is true.</strong>
<?php
} else {
?>
<strong>This is false.</strong>
<?php
}
?>
Instruction separation
<?php
echo 'This is a test';
?>
<?php echo 'This is a test' ?>
<?php echo 'We omitted the last closing tag';
Comments
<?php
// single line comment
if ($condition) { // another single line c++ style comment
/* This is a multi-line comment
that spans over multiple lines */
echo 'This is a test';
echo 'This is another test'; # with a single line shell style comment
}
A common mistake is to nest multi-line comments !
/* This multi-line comment
/* has a nested multi-line comment
spanning two lines */
*/
The last */ will never be reached !!!
Single quoted strings
<?php
echo 'this is a simple string'; // this is a simple string
echo 'this is a ' . 'combined string'; // this is a combined string
echo 'this is a multi- // this is a multi-line string
line string';
echo 'I'm an escaped character string'; // I'm an escaped character string
$var = '[var]';
echo 'this $var is not processed'; // this $var is not processed
Double quoted strings
<?php
echo "this is a simple string"; // this is a simple string
echo "this is a " . "combined string"; // this is a combined string
echo "this is a multi- // this is a multi-line string
line string";
echo "I'm an escaped character string"; // I'm an escaped character string
$var = '[var]';
echo "this $var is processed"; // this [var] is processed
Objects
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
Outputs
Doing foo
More about objects in the advanced PHP session…
Resource
•- Special type
holds a reference to an external source
❖ a database, a file, a stream, …
- can be used to verify a resource type
NULL
• represents a variable with no value
•- a variable is considered null
when assigned the NULL constant
- it has no value assigned yet
- has been emptied by unset()
Pseudo Types
• mixed: used for any type
• number: used for integers and floats
•- callback:
a function (name) is used as parameter
- a closure or anonymous function (as of PHP 5.3)
- cannot be a language construct
Type Juggling
• no explicit type definitions of variables
•- type of variable can change
remember the shoot in the foot part !
• enforced type casting to validate types
Confused yet ?
Type Juggling example
<?php
$foo = "0"; // $foo is string (ASCII 48)
$foo += 2; // $foo is now an integer (2)
$foo = $foo + 1.3; // $foo is now a float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo is integer (15)
$foo = 5 + "20 Small Pigs"; // $foo is integer (25)
?>
Predefined Variables
• Superglobals: are built-in variables (always available in all scopes)
• $GLOBALS: References all variables available in global scope
• $_SERVER: Server and execution environment information
• $_GET: HTTP GET variables
• $_POST: HTTP POST variables
• $_FILES: HTTP File Upload variables
• $_REQUEST: HTTP Request variables
• $_SESSION: Session variables
• $_ENV: Environment variables
• $_COOKIE: HTTP Cookies
• $php_errormsg: The previous error message
• $HTTP_RAW_POST_DATA: Raw POST data
• $http_response_header: HTTP response headers
• $argc: The number of arguments passed to script
• $argv: Array of arguments passed to script
Variable Scope
context in which a variable is defined
<?php
$a = 1;
include ‘file.inc.php’; // $a is known inside the included script
global scope
<?php
$a = 1;
$b = 2;
function foo()
{
global $a, $b;
echo $b = $a + $b;
}
foo(); // outputs 3
echo $b; // outputs 3 ($b is known outside it’s scope)
Variable Variables
<?php
$a = ‘php’; // value ‘php’ stored in $a
$$a = ‘rules’; // value ‘rules’ stored in $$a (or $php)
echo “$a ${$a}”; // outputs ‘php rules’
echo “$a $php”; // outputs ‘php rules’
Constants
• an identifier (name) for a simple value
• that value cannot change
• is case-sensitive by default
• are always uppercase (by convention)
•- 2 types
basic
- magic
Magic Constants
• __LINE__: current line number of the file
• __FILE__: full path and filename of the file
• __DIR__: directory of the file
• __FUNCTION__: function name (cs)
• __CLASS__: class name (cs)
• __METHOD__: class method name (cs)
• __NAMESPACE__: current namespace (cs)
Expressions
$a = 5;
function foo()
{
return ‘bar’;
}
0 < $a ? true : false;
$a = $b = 2; // both $a and $b have a value of 2
$c = ++$b; // $c has value 3 and $b has value 3
$d = $c++; // $d has value 3 and $c has value 4
Next step: advanced PHP
Classes and Objects
Abstraction
Security
PHP Hidden Gems
Recommended Reading
CYAN YELLOW
MAGENTA BLACK
BOOKS FOR PROFESSIONALS BY PROFESSIONALS ® THE EXPERT’S VOICE® IN OPEN SOURCE
Companion
eBook
Available
PHP for Absolute Beginners
PHP for Absolute Beginners
Dear Reader,
PHP for Absolute Beginners will take you from zero to full-speed with PHP pro-
gramming in an easy-to-understand, practical manner. Rather than building
PHP
applications with no real-world use, this book teaches you PHP by walking you
through the development of a blogging web site.
You’ll start by creating a simple web-ready blog, then you'll learn how to add
password-protected controls, support for multiple pages, the ability to upload
and resize images, a user comment system, and finally, how to integrate with
sites like Twitter.
Along the way, you'll also learn a few advanced tricks including creating
friendly URLs with .htaccess, using regular expressions, object-oriented pro-
gramming, and more.
I wrote this book to help you make the leap to PHP developer in hopes that
you can put your valuable skills to work for your company, your clients, or on
your own personal blog. The concepts in this book will leave you ready to take
on the challenges of the new online world, all while having fun!
PHP for Absolute Beginners for Absolute Beginners
Jason Lengstorf
THE APRESS ROADMAP
Apress
PHP Objects, Patterns, Pro PHP:
PHP for
and Practice Patterns, Frameworks,
Absolute Beginners
Testing, and More
Beginning PHP Practical Web 2.0
and MySQL Applications with PHP
Jason Lengstorf Everything you need to know to
Beginning Ajax and PHP
Companion eBook
get started with PHP
See last page for details
on $10 eBook version
Lengstorf
SOURCE CODE ONLINE
www.apress.com
Jason Lengstorf
US $34.99
Shelve in:
PHP
User level:
Beginner
this print for content only—size & color not accurate trim = 7.5" x 9.25" spine = 0.75" 408 page count
Credits
Ball of nails - Count Rushmore
http://flickr.com/photos/countrushmore/2437899191
Life is too short for Java - Terry Chay
http://flickr.com/photos/tychay/1388234558
Ruby Fails - IBSpoof (stickers by @spooons)
http://www.flickr.com/photos/ibspoof/2879088241
Monkey Face - Mr Pins
http://flickr.com/photos/7359188@N02/1358576877
Unicode Identifiers - Andrei Zmievski / Andrew Mager
http://andrewmager.com/geeksessions-13-php-scalability-and-performance/
Confused - Kristian D.
http://flickr.com/photos/kristiand/3223044657
Questions ?
Slides on SlideShare
http://www.slideshare.net/DragonBe
Give feedback !
http://joind.in/1256