PHP Object Orientation (APIE)
PHP Object Orientation (APIE)
PHP Object Orientation (APIE)
ORIENTATION
(APIE)
OBJECT
ORIENTATION
PHP is an Object-Oriented programming
language
Fundamental feature of OO is the class
PHP classes support
Encapsulation
Inheritance
Polymorphism
Abstraction
2
OOP in Web Programming
Small Web projects
• Consist of web scripts designed and written using an ad-hoc approach; a
function-oriented, procedural methodology
Large Web software projects
• Need a properly thought-out development methodology – OOP →
• OO approach can help manage project complexity, increase code
reusability, reduce costs.
• OO analysis and design process = decide what object types, what hidden
data/operations and wrapper operations for each object type
• UML – as tool in OO design, to allow to describe classes and class
relationships
3
OBJECT ORIENTED
CONCEPT
Classes, which are the "blueprints" for an object and are
the actual code that defines the properties and methods.
Objects, which are running instances of a class and
contain all the internal data and state information needed
for your application to function.
Encapsulation, which is the capability of an object to
protect access to its internal data
Inheritance, which is the ability to define a class of one
kind as being a sub-type of a different kind of class
(much the same way a square is a kind of rectangle).
WHAT IS A CLASS?
Classes
Sophisticated ‘variable types’
Data variables (data members) and functions
(methods) are wrapped up in a class.
Collectively, data members and methods are
referred to as class members.
An instance of a class is known as an object.
//defining a new class named Robot
class Robot {
//place class members here...
}
CREATING CLASS
Let's start with a simple example. Save the following in a file
called class.lat.php:
<?php
class Demo
{
}
?>
ADDING METHOD
The Demo class isn't particularly useful if it isn't able to do
anything, so let's look at how you can create a method.
<?php
class Demo
{
function SayHello($name)
{
echo “Hello $name !”;
}
}
?>
ADDING PROPERTIES
Adding a property to your class is as easy as adding a
method.
<?php
class Demo
{
public $name;
function SayHello()
{
echo “Hello $this->$name !”;
}
}
?>
OBJECT
INSTANTIATION
You can instantiate an object of type Demo like this:
<?php
require_once('class.lat.php');
$objDemo = new Demo();
$objDemo->name = “Bayu”;
$objDemo->SayHallo();
?>
INSTANTIATING A CLASS USING
NEW
Once a class has been created, any number of
object instances of that class can be created.
$dogRobot = new Robot();
To invoke methods:
e.g.
object->method() <?php
....
$dogRobot = new Robot();
$dogRobot ->crawlWeb();
$dogRobot -> play();
echo $dogRobot ->talk();
...
?>
DEFINING CLASSES
<?php
class Person { Data members
private $strFirstname = “Napoleon";
private $strSurname = “Reyes";
function getFirstname() {
return $this->strFirstname;
} Methods
function getSurname() {
return $this->strSurname;
}
}
// outside the class definition
$obj = new Person; // an object of type Person
echo "<p>Firstname: " . $obj->getFirstname() . "</p>";
echo "<p>Surname: " . $obj->getSurname() . "</p>";
?>
DATA MEMBERS AND METHODS
class Class1 {
We need to provide
• private $strName = “A”; accessor functions to
• private $intNumber = 1; allow users of Class1
• function getName() { to access the private
•}
data members:
• function getNumber(){ function getName(){
•} return $this-
} >strName;
}
Is this publicly
accessible?
$THIS OBJECT POINTER
As with so many languages, there is a special
pointer that references an instance of a class:
$this
function setSurname($strSurname) {
$this->strSurname = $strSurname;
}
Public is the default visibility level for any member variables or functions
that do not explicitly set one, but it is good practice to always explicitly
state the visibility of all the members of the class.
PROTECTING ACCESS TO
MEMBER VARIABLES (2)
Try to change access level of property named “name” to
private of previous code.
What the possible solution of this problem?
Always use get and set functions for your properties. Changes to business
logic and data validation requirements in the future will be much easier to
implement.
PRIVATE ACCESS SPECIFIER
class MyClassName{
private $strFirstName;
}
private – limits the
visibility of the
methods and data
members only to the
class that defines them.
MODIFYING DATA MEMBERS
intNumber is private
Outside the class, trying to execute
the following:
$clMyObj->intNumber++;
will fail!...
We need a method to access and change
its value:
function setNumber($intNumber) {
$this->intNumber = $intNumber;
} Look at the position of the dollar sign ($) – no
PUBLIC ACCESS SPECIFIER
class MyClassName{
public $strFirstName;
public function getFirstName(){
}
}
public – class
members can be
accessed both
within and outside
the class.
PROTECTED ACCESS SPECIFIER
//protected for public use, but accessible in
Class MyClassName{ a derived class
protected $strFirstName;
protected function getFirstName(){
}
Inherited protected class members
}
– accessible inside a derived class
Visibility of protected class
members outside the class
definition – protected class
members are inaccessible.
EXAMPLE: ACCESS SPECIFIERS
<?php
class MyClass {
public $public = 'Public';
protected $protected = 'Protected'; //protected for public use, but accessible in a derived class
private $private = 'Private';
function printHello() {
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
// outside the class definition
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
//...
http://php.net/manual/en/language.oop5.visibility.php
EXAMPLE: ACCESS SPECIFIERS
<?php a Derived class
//...
class MyClass2 extends MyClass
{
// We can redeclare the public and protected method, but not private
// protected – ‘protected’ for public use, but accessible in a derived class
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
// outside the class definition
$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined
?>
http://php.net/manual/en/language.oop5.visibility.php
Example: Method Declaration
<?php //OUTSIDE THE CLASS DEFINITION...
class MyClass
{
// Declare a public constructor
public function __construct() { }
$myclass = new MyClass;
$myclass->MyPublic(); // Works
$myclass->MyProtected(); // Fatal Error
// Declare a public method
public function MyPublic() { }
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Public, Protected and Private
work
// Declare a protected method
protected function MyProtected() { } //...
// This is public
function Foo()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
http://php.net/manual/en/language.oop5.visibility.php
EXAMPLE: METHOD DECLARATION
<?php class MyClass2 extends MyClass
class MyClass
{
{
// Declare a public constructor // This is public
public function __construct() { } function Foo2()
{
// Declare a public method
$this->MyPublic();
public function MyPublic() { }
$this->MyProtected();
// Declare a protected method $this->MyPrivate(); // Fatal Error
protected function MyProtected() { } }
}
// Declare a private method
private function MyPrivate() { }
$myclass2 = new MyClass2;
// This is public $myclass2->MyPublic(); // Works
function Foo()
$myclass2->Foo2(); // Public and Protected work, not Private
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
http://php.net/manual/en/language.oop5.visibility.php
EXAMPLE: METHOD DECLARATION
<?php
class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}
http://php.net/manual/en/language.oop5.visibility.php
ACCESSING PRIVATE MEMBERS
OF THE SAME OBJECT TYPE
<?php
class Test
{
private $foo;
Objects of the same type will have access to each others
Private and protected members even though they are
public function __construct($foo)
not the same instances.
{
$this->foo = $foo;
} string(5) "hello"
private function bar()
{
Accessed the private method
echo 'Accessed the private method.';
}
$test->baz(new Test('other'));
?>
http://php.net/manual/en/language.oop5.visibility.php
CLASS CONSTANTS
It is possible to define constant values on a per-class
basis remaining the same and unchangeable.
Constants differ from normal variables in that you don't
use the $ symbol to declare or use them
The value must be a constant expression, not (for
example) a variable, a property, a result of a mathematical
operation, or a function call
CLASS CONSTANTS
(CONT.)
<?php
class MyClass
{
const constant = 'constant value';
function showConstant() {
echo self::constant . "\n";
}
}
echo MyClass::constant . "\n";
?>
STATIC KEYWORD
Declaring class properties or methods as static makes them
accessible without needing an instantiation of the class.
A property declared as static can not be accessed with an
instantiated class object
EXAMPLE
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
CONTRUCTOR
Constructor is the method that will be
implemented when object has been initiated
Commonly, constructor is used to initialize
the object
Use function __construct to create
constructor in PHP
<?php
class Demo
{
function __construct
{
}
}
?>
DESTRUCTOR
Destructor, is method that will be run when object is ended
<?php
class Demo
{
function __destruct
{
}
}
?>
CREATING OBJECTS
•Instantiate classes using new keyword
– $myCart= new ShoppingCart(“Charlie”);
Constructors
– In earlier versions of PHP (< PHP5.3.3) Same as the
name of the class. This no longer holds!
– (PHP5 only) declared as
• public function __construct(…)
Destructors
– Declared as
– public function __destruct()
Latest in PHP5.3.3
<?php
namespace Foo;
class Bar {
public function Bar() {
// treated as constructor in PHP 5.3.0-5.3.2
// treated as regular method in PHP 5.3.3
}
}
?>
CONSTRUCTORS
A constructor is a function that does initializations when the
class is instantiated
function __construct($intNumber, $strName){
$this->set_intNumber($intNumber);
$this->set_strName($strName);
$this->printInit();//use this method
}
CONSTRUCTORS
Default arguments
function __construct ($strName = “A”,
$intNumber=0) {
$this->set_intNumber($int_Number);
$this->set_strName($str_Name);
}
Instantiating a class without parameters will make use of the
default values
ANOTHER EXAMPLE: CONSTRUCTORS
<?php
class vehicle {
private $strDescription;
function getDescription() {
return $this->strDescription;
}
function setDescription($strDescription) {
$this->strDescription = $strDescription;
}
require_once("vehicle.php");
?>
DESTRUCTORS
Called when objects are destroyed – free up memory
e.g.:
function __destruct () {
echo “freeing up memory, destroying this object... <br>”;
}
<?php
$cart1 = new ShoppingCart(“Joe Bloggs”);
$cart1->addItem("10", 1);
function __construct()
{
}
function berpindah()
{
echo "Saya berpindah";
}
function makan()
{
echo "Saya makan";
}
}
INHERITANCE (3)
class kucing extends hewan }
{
function berpindah() function makan()
{ {
echo "Saya merangkak echo "Saya makan
dengan 4 kaki"; dengan mematuk";
} }
}
}
class burung extends hewan
{ class monyet extends hewan
protected $sayap; {
function berpindah() }
{
echo "Saya terbang";
POLYMORPHISM
A concept where a number of related classes all have a
method, which shares the same name.
• require_once(….)
Includes file specified only if it has not already been
included, terminates on errors
• include_once(….)
Includes file specified only if it has not already been
included, gives warning on errors
Really useful but would require you to write a long list of include() or require()
statements
at the beginning of each script, one for each class. In PHP5, this is no longer
necessary. You may define an __autoload function!
FUNCTION __AUTOLOAD()
• The function is invoked automatically each time a
class is required but has not been defined.
function __autoload($class_name) {
require_once $class_name . '.php';
}
http://nz2.php.net/manual/en/reflectionclass.newinstance.php
BASIC INHERITANCE
class ClassName extends ClassName {
...
} PHP
The given class will inherit all data and behavior from
ClassName
CS380
STATIC METHODS,
FIELDS, AND CONSTANTS
static $name = value; # declaring a static field
const $name = value; # declaring a static constant
PHP
ClassName::methodName(parameters); # calling a
static method (outside class)
self::methodName(parameters); # calling a static
method (within class) PHP
CS380
ABSTRACT CLASSES
AND INTERFACES
interfaces are supertypes that specify
method headers without implementations
• cannot be instantiated; cannot contain function
bodies or fields
• enables polymorphism between subtypes without
sharing implementation code
abstract classes are like interfaces, but you
can specify fields, constructors, methods
• also cannot be instantiated; enables polymorphism
with sharing of implementation code
CS380
CONSTRUCTING AND
USING OBJECTS
# construct an object
$name = new ClassName(parameters);
# access an object's field (if the field is public)
$name->fieldName
# call an object's method
$name->methodName(parameters);
PHP