ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.
-
Upload
daisy-nelson -
Category
Documents
-
view
225 -
download
1
Transcript of ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.
![Page 1: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/1.jpg)
May-2007 : [1]PHPClasses
PHP Classes and
Object Orientation
![Page 2: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/2.jpg)
May-2007 : [2]PHPClasses
Reminder… a function
• Reusable piece of code.
• Has its own ‘local scope’.
function my_func($arg1,$arg2) {
<< function statements >>
}
![Page 3: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/3.jpg)
May-2007 : [3]PHPClasses
Conceptually, what does a function represent?
…give the function something (arguments), it does something with them, and then returns a result…
Action or Method
![Page 4: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/4.jpg)
May-2007 : [4]PHPClasses
What is a class?
Conceptually, a class represents an object, with associated methods
and variables
![Page 5: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/5.jpg)
May-2007 : [5]PHPClasses
Class Definition<?phpclass dog {var $name;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.
![Page 6: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/6.jpg)
May-2007 : [6]PHPClasses
Class Definition<?phpclass dog {var $name;function bark() {
echo ‘Woof!’;}
} ?>
class dog {Define the name of the class.
![Page 7: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/7.jpg)
May-2007 : [7]PHPClasses
Class Definition<?phpclass dog {var $namefunction bark() {
echo ‘Woof!’;}
} ?>
var $name;
Define an object attribute (variable), the dog’s name.
![Page 8: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/8.jpg)
May-2007 : [8]PHPClasses
Class Definition<?phpclass dog {var $name;function bark() {
echo ‘Woof!’;}
} ?>
function bark() {echo ‘Woof!’;
}
Define an object action (function), the dog’s bark.
![Page 9: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/9.jpg)
May-2007 : [9]PHPClasses
Class Definition<?phpclass dog {var $name;function bark() {
echo ‘Woof!’;}
} ?>
}End the class definition
![Page 10: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/10.jpg)
May-2007 : [10]PHPClasses
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…
![Page 11: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/11.jpg)
May-2007 : [11]PHPClasses
Class Usage<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
![Page 12: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/12.jpg)
May-2007 : [12]PHPClasses
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
![Page 13: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/13.jpg)
May-2007 : [13]PHPClasses
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.
![Page 14: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/14.jpg)
May-2007 : [14]PHPClasses
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’.
![Page 15: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/15.jpg)
May-2007 : [15]PHPClasses
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..
![Page 16: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/16.jpg)
May-2007 : [16]PHPClasses
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.
![Page 17: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/17.jpg)
May-2007 : [17]PHPClasses
Class Usage<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
[example file: classes1.php]
![Page 18: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/18.jpg)
May-2007 : [18]PHPClasses
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’;
![Page 19: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/19.jpg)
May-2007 : [19]PHPClasses
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 { var $name; function bark() { echo $this->name.‘ says Woof!’; }}
![Page 20: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/20.jpg)
May-2007 : [20]PHPClasses
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 same name as the class.
• Remember.. if the constructor requires arguments, they must be passed when it is instantiated!
![Page 21: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/21.jpg)
May-2007 : [21]PHPClasses
Constructor Example<?phpclass dog {var $name;function dog($nametext) {
$this->name = $nametext;}function bark() {
echo ‘Woof!’;}
} ?>
Constructor function
![Page 22: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/22.jpg)
May-2007 : [22]PHPClasses
Constructor Example<?php
…
$puppy = new dog(‘Rover’);
…
?> Constructor arguments are passed during the instantiation of the object.
[example file: classes2.php]
![Page 23: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/23.jpg)
May-2007 : [23]PHPClasses
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..
![Page 24: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/24.jpg)
May-2007 : [24]PHPClasses
HOE 16
Using Classes
![Page 25: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/25.jpg)
May-2007 : [25]PHPClasses
Inheritance
• The real power of using classes is the property of inheritance – creating a hierarchy of interlinked classes.
dog
poodle alsatian
parent
children
![Page 26: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/26.jpg)
May-2007 : [26]PHPClasses
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…
![Page 27: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/27.jpg)
May-2007 : [27]PHPClasses
Inheritance exampleThe American Kennel Club (AKC) recognizes three sizes of poodle - Standard,Miniature, and Toy…
class poodle extends dog {var $type;function set_type($height) {
if ($height<10) { $this->type = ‘Toy’;
} elseif ($height>15) {$this->type = ‘Standard’;
} else {$this->type = ‘Miniature’;
}}
}
![Page 28: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/28.jpg)
May-2007 : [28]PHPClasses
Inheritance exampleThe American Kennel Club (AKC) recognizes three sizes of poodle - Standard,Miniature, and Toy…
class poodle extends dog {var $typefunction 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…
![Page 29: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/29.jpg)
May-2007 : [29]PHPClasses
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();
…
[example file: classes3.php]
![Page 30: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/30.jpg)
May-2007 : [30]PHPClasses
…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 {…function bark() {
echo ‘Yip!’;}…
}
[example file: classes4.php]
![Page 31: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/31.jpg)
May-2007 : [31]PHPClasses
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.
![Page 32: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/32.jpg)
May-2007 : [32]PHPClasses
Objects within Objects
• It is perfectly possible to include objects within another object..
class dogtag { var $words;}
class dog { var $name; var $tag;
function bark() { echo "Woof!\n"; }}
…$puppy = new dog;$puppy->name = “Rover";$poppy->tag = new dogtag;$poppy->tag->words = “blah”;…
![Page 33: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/33.jpg)
May-2007 : [33]PHPClasses
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.
![Page 34: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/34.jpg)
May-2007 : [34]PHPClasses
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
![Page 35: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/35.jpg)
May-2007 : [35]PHPClasses
HOE 17
Class Inheritance
![Page 36: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/36.jpg)
May-2007 : [36]PHPClasses
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();
![Page 37: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/37.jpg)
May-2007 : [37]PHPClasses
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…
![Page 38: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/38.jpg)
May-2007 : [38]PHPClasses
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).
![Page 39: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/39.jpg)
May-2007 : [39]PHPClasses
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!
![Page 40: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/40.jpg)
May-2007 : [40]PHPClasses
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…
![Page 41: ClassesPHPMay-2007 : [‹#›] PHP Classes and Object Orientation.](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649eda5503460f94bea1ab/html5/thumbnails/41.jpg)
May-2007 : [41]PHPClasses
HOE 18
OOP login: A discussion