php workshop ‹#› php classes and object orientation

38
PHP Workshop 1 PHP Classes and Object Orientation

Upload: lorena-ellis

Post on 23-Dec-2015

238 views

Category:

Documents


5 download

TRANSCRIPT

PHP Workshop 1

PHP Classes and

Object Orientation

PHP Workshop 2

Reminder… a function

• Reusable piece of code.

• Has its own ‘local scope’.

function my_func($arg1,$arg2) {

<< function statements >>

}

PHP Workshop 3

Conceptually, what does a function represent?

…give the function something (arguments), it does something with them, and then returns a result…

Action or Method

PHP Workshop 4

What is a class?

Conceptually, a class represents an object, with associated methods

and variables

PHP Workshop 5

Class Definition<?phpclass dog {public $name;public function bark() {

echo ‘Woof!’;}

} ?>

An example class definition for a dog. The dog object has a single attribute, the name, and can perform the action of barking.

PHP Workshop 6

Class Definition<?phpclass dog {public $name;public function bark() {

echo ‘Woof!’;}

} ?>

class dog {Define the name of the class.

PHP Workshop 7

Class Definition<?phpclass dog {var $namepublic function bark() {

echo ‘Woof!’;}

} ?>

public $name;

Define an object attribute (variable), the dog’s name.

PHP Workshop 8

Class Definition<?phpclass dog {public $name;function bark() {

echo ‘Woof!’;}

} ?>

public function bark() {echo ‘Woof!’;

}

Define an object action (function), the dog’s bark.

PHP Workshop 9

Class Definition<?phpclass dog {public $name;public function bark() {

echo ‘Woof!’;}

} ?>

}End the class definition

PHP Workshop 10

Class DefintionSimilar to defining a function..

The definition does not do anything by itself. It is a blueprint, or description, of an object. To do something, you need to use

the class…

PHP Workshop 11

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

PHP Workshop 12

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

require(‘dog.class.php’);

Include the class definition

PHP Workshop 13

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

$puppy = new dog();

Create a new instance of the class.

PHP Workshop 14

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

$puppy->name = ‘Rover’;

Set the name variable of this instance to ‘Rover’.

PHP Workshop 15

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

echo “{$puppy->name} says ”;

Use the name variable of this instance in an echo statement..

PHP Workshop 16

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

$puppy->bark();Use the dog object bark method.

PHP Workshop 17

Class Usage<?php

require(‘dog.class.php’);

$puppy = new dog();

$puppy->name = ‘Rover’;

echo “{$puppy->name} says ”;

$puppy->bark();

?>

[example file: classes1.php]

PHP Workshop 18

One dollar and one only…

$puppy->name = ‘Rover’;The most common mistake is to use more

than one dollar sign when accessing variables. The following means something

entirely different..

$puppy->$name = ‘Rover’;

PHP Workshop 19

Using attributes within the class..

• If you need to use the class variables within any class actions, use the special variable $this in the definition:class dog { public $name; public function bark() { echo $this->name.‘ says Woof!’; }}

PHP Workshop 20

Constructor methods• A constructor method is a function that is

automatically executed when the class is first instantiated.

• Create a constructor by including a function within the class definition with the __construct name.

• Remember.. if the constructor requires arguments, they must be passed when it is instantiated!

PHP Workshop 21

Constructor Example<?phpclass dog {public $name;public function __construct($nametext) {

$this->name = $nametext;} public function bark() {

echo ‘Woof!’;}

} ?>

Constructor function

PHP Workshop 22

Constructor Example<?php

$puppy = new dog(‘Rover’);

?> Constructor arguments are passed during the instantiation of the object.

PHP Workshop 23

Class Scope

• Like functions, each instantiated object has its own local scope.

e.g. if 2 different dog objects are instantiated, $puppy1 and $puppy2, the two dog names $puppy1->name and $puppy2->name are entirely independent..

PHP Workshop 24

Inheritance

• The real power of using classes is the property of inheritance – creating a hierarchy of interlinked classes.

dog

poodle alsatian

parent

children

PHP Workshop 25

Inheritance

• The child classes ‘inherit’ all the methods and variables of the parent class, and can add extra ones of their own.

e.g. the child classes poodle inherits the variable ‘name’ and method ‘bark’ from the dog class, and can add extra ones…

PHP Workshop 26

Inheritance exampleThe American Kennel Club (AKC) recognizes three sizes of poodle -  Standard,Miniature, and Toy…

class poodle extends dog {public $type;public function set_type($height) {

if ($height<10) { $this->type = ‘Toy’;

} elseif ($height>15) {$this->type = ‘Standard’;

} else {$this->type = ‘Miniature’;

}}

}

PHP Workshop 27

Inheritance exampleThe American Kennel Club (AKC) recognizes three sizes of poodle -  Standard,Miniature, and Toy…

class poodle extends dog {public $typepublic function set_type($height) {

if ($height<10) { $this->type = ‘Toy’;

} elseif ($height>15) {$this->type = ‘Standard’;

} else {$this->type = ‘Miniature’;

}}

}

class poodle extends dog {

Note the use of the extends keyword to indicate that the poodle class is a child of the dog class…

PHP Workshop 28

Inheritance example

$puppy = new poodle(‘Oscar’);

$puppy->set_type(12); // 12 inches high!

echo “Poodle is called {$puppy->name}, ”;

echo “of type {$puppy->type}, saying “;

echo $puppy->bark();

PHP Workshop 29

…a poodle will always ‘Yip!’

• It is possible to over-ride a parent method with a new method if it is given the same name in the child class..

class poodle extends dog {…public function bark() {

echo ‘Yip!’;}…

}

PHP Workshop 30

Child Constructors?• If the child class possesses a constructor

function, it is executed and any parent constructor is ignored.

• If the child class does not have a constructor, the parent’s constructor is executed.

• If the child and parent does not have a constructor, the grandparent constructor is attempted…

• … etc.

PHP Workshop 31

Objects within Objects

• It is perfectly possible to include objects within another object..

class dogtag {    public $words;}

class dog {    public $name;    public $tag;

    public function bark() {        echo "Woof!\n";    }}

…$puppy = new dog;$puppy->name = “Rover";$poppy->tag = new dogtag;$poppy->tag->words = “blah”;…

PHP Workshop 32

Deleting objects

• So far our objects have not been destroyed till the end of our scripts..

• Like variables, it is possible to explicitly destroy an object using the unset() function.

PHP Workshop 33

A copy, or not a copy..

• Entire objects can be passed as arguments to functions, and can use all methods/variables within the function.

• Remember however.. like functions the object is COPIED when passed as an argument unless you specify the argument as a reference variable &$variable

PHP Workshop 34

Why Object Orientate?

Reason 1

Once you have your head round the concept of objects, intuitively named object orientated code becomes easy to understand.

e.g.

$order->display_basket();

$user->card[2]->pay($order);

$order->display_status();

PHP Workshop 35

Why Object Orientate?

Reason 2

Existing code becomes easier to maintain.

e.g. If you want to extend the capability of a piece of code, you can merely edit the class definitions…

PHP Workshop 36

Why Object Orientate?

Reason 3

New code becomes much quicker to write once you have a suitable class library.

e.g. Need a new object..? Usually can extend an existing object. A lot of high quality code is distributed as classes (e.g. http://pear.php.net).

PHP Workshop 37

There is a lot more…

• We have really only touched the edge of object orientated programming…

http://www.php.net/manual/en/language.oop.php

• … but I don’t want to confuse you too much!

PHP Workshop 38

PHP4 vs. PHP5

• OOP purists will tell you that the object support in PHP4 is sketchy. They are right, in that a lot of features are missing.

• PHP5 OOP system has had a big redesign and is much better.

…but it is worth it to produce OOP

code in either PHP4 or PHP5…