Bài giảng Phát triển ứng dụng web - Bài 5: Object oriented programming - Nguyễn Hữu Thể
Content
1. Class
2. Visibility
3. Properties & Methods
4. Getter & Setter
5. Create objects
6. Constructor
7. Destructor
8. Inheritance
9. Abstract class
10. Interfaces
11. Autoloading classes
12. Anonymous functions
13. Closures
14. Namespace

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Phát triển ứng dụng web - Bài 5: Object oriented programming - Nguyễn Hữu Thể", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
        
        Tóm tắt nội dung tài liệu: Bài giảng Phát triển ứng dụng web - Bài 5: Object oriented programming - Nguyễn Hữu Thể
 PHÁT TRIỂN ỨNG DỤNG WEB
OBJECT ORIENTED PROGRAMMING
 Nguyễn Hữu Thể
 Content
1. Class
2. Visibility
3. Properties & Methods
4. Getter & Setter
5. Create objects
6. Constructor
7. Destructor
8. Inheritance
9. Abstract class
10. Interfaces
11. Autoloading classes
12. Anonymous functions
13. Closures
14. Namespace
 2
 Class 
class ClassName
{
 // Properties
 // Methods
}
 3
 Visibility (public, private, protected)
− Three levels:
 • public
 • private
 • protected
− By default, all class members are public.
 4
 Properties & Methods
class Person
{
 private $name; //public, protected
 private $age;
 public function show(){
 echo $this->name . " is " . $this->age . " years old!";
 }
}
 5
 Create objects
 (Create a new instance of the class)
− Using the new keyword:
 new ClassName()
− For example:
 $person = new PerSon();
 $person2 = new PerSon();
 6
 Getter & Setter
PHP JAVA
class Person class Person 
{ { 
 private $name; private String name; 
 private $age; private int age; 
 public function getName(){ public String getName(){ 
 return $this->name; return name; 
 } } 
 public function setName($name){ public void setName(String name){ 
 $this->name = $name; this.name = name; 
 } } 
 public function getAge(){ public int getAge(){ 
 return $this->age; return age; 
 } } 
 public function setAge($age){ public void setAge(int age){ 
 $this->age = $age; this.age = age; 
 } } 
} } 
 7
class Person{ Ex: Person.php
 private $name;
 private $age;
 public function getName(){
 return $this->name;
 }
 public function setName($name){
 $this->name = $name;
 }
 public function getAge(){
 return $this->age;
 }
 public function setAge($age){
 $this->age = $age;
 }
 public function show(){
 echo $this->name . " is " . $this->age . " years old!";
 }
} $p = new Person();
 $p->setName("Nguyễn Văn A");
 $p->setAge(18);
 echo $p->getName() . " is " . $p->getAge() . " years old.";
 //echo "{$p->getName()} is {$p->getAge()} years old.";
 $p->show(); 8
 __set() method
class SetName {
 public function __set($variable, $value) {
 // echo $variable;
 echo "My " . $variable . " is " . $value . "\n";
 }
}
$obj = new SetName ();
$obj->Name = ‘Tom';
$obj->Name = ‘Jerry';
My Name is Tom
My Name is Jerry
 9
 __get() method
class GetName {
 public $type = 'chocolate';
 public $choctype = array (
 'milk' => 0,
 'dark' => 1,
 'plain' => 2 
 );
 public function wrap() {
 echo 'Its a wrap';
 }
 public function __get($index) {
 echo '$choctype property with index of: ' . $index . '';
 return $this->choctype [$index];
 }
}
$candy = new GetName ();
// set a non existant property
echo 'Value of property is: ' . $candy->milk; $choctype property with index of: milk
 10
 Value of property is: 0
 Constructor
public function __construct() {
 //...
}
public function __construct($name, $age) {
 //...
}
 11
 Constructor
class Person{
 private $name;
 private $age;
 public function __construct($name, $age) {
 $this->name = $name;
 $this->age = $age;
 }
 public function show(){
 echo $this->name . " is " . $this->age . " years old!";
 }
}
$p = new Person("Nguyễn Trần Lê", 18);
$p->show();
 12
 Destructor
 public function __destruct() {
 //...
 }
− Example:
 public function __destruct() {
 echo "Bye bye!";
 //...
 }
− Using: 
 $p = new Person("Nguyễn Trần Lê", 18);
 unset( $p ); // or exit: call __destruct() object
 $p->show(); // Object not found
 13
 Inheritance
class ParentClass {
 public function myMethod() {
 // Method code here
 }
}
class ChildClass extends ParentClass {
 public function myMethod() {
 // For ChildClass objects, this method is called
 // instead of the parent class's MyMethod()
 }
}
 14
Calling a parent method from a child method
 parent::myMethod();
 Example:
 parent::show();
 parent::__construct();
 15
require_once 'Person.php';
class Employee extends Person{
 private $salary; Inheritance
 public function __construct($name, $age, $salary){
 parent::__construct($name, $age); // Call __construct() parent
 $this->salary = $salary;
 }
 public function getSalary(){
 return $this-> $salary;
 }
 // Override
 public function show(){
 parent::show();
 echo " Salary: " . $this->salary;
 }
 public function display(){
 echo " Name: " . $this->getName() . "";
 echo " Age: " . $this->getAge() . "";
 echo "Salary: " . $this->salary;
 } $e = new Employee("Nguyễn Lê", 20, 200);
} $e->show();
 Nguyễn Lê is 20 years old! Salary: 200 16
 Visibility (Example 1)
 Property Visibility
class MyClass {
 public $public = 'Public';
 protected $protected = 'Protected';
 private $private = 'Private';
 function printHello() {
 echo $this->public;
 echo $this->protected;
 echo $this->private;
 }
}
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
 17
 Visibility (Example 2)
 Property Visibility
class MyClass2 extends MyClass {
 // We can redeclare the public and protected method, but not private
 public $public = 'Public2';
 protected $protected = 'Protected2';
 function printHello() {
 echo $this->public;
 echo $this->protected;
 echo $this->private;
 }
}
$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->protected; // Fatal Error
echo $obj2->private; // Undefined
$obj2->printHello(); // Shows Public2, Protected2, Undefined
 18
 Visibility (Example 3)
 Method Visibility
class MyClass {
 // Declare a public constructor
 public function __construct() { }
 // Declare a public method
 public function MyPublic() { }
 // Declare a protected method
 protected function MyProtected() { }
 // Declare a private method
 private function MyPrivate() { }
 // This is public
 function Foo() {
 $this->MyPublic(); $myclass = new MyClass;
 $this->MyProtected(); $myclass->MyPublic(); // Works
 $this->MyPrivate(); $myclass->MyProtected(); // Fatal Error
 } $myclass->MyPrivate(); // Fatal Error
} $myclass->Foo(); // Public, Protected and Private work 19
 Visibility (Example 4)
 Method Visibility
class MyClass2 extends MyClass
{
 // This is public
 function Foo2()
 {
 $this->MyPublic();
 $this->MyProtected();
 $this->MyPrivate(); // Fatal Error
 }
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Public and Protected work, not Private
 20
 Visibility (Example 5)
 Method Visibility
class Bar class Foo extends Bar
{ {
 public function test() { public function testPublic() {
 $this->testPrivate(); echo "Foo::testPublic\n";
 $this->testPublic(); }
 }
 private function testPrivate() {
 public function testPublic() { echo "Foo::testPrivate\n";
 echo "Bar::testPublic\n"; }
 } }
 private function testPrivate() { $myFoo = new Foo();
 echo "Bar::testPrivate\n"; $myFoo->test(); // Bar::testPrivate
 } // Foo::testPublic
}
 21
 Abstract class
− An abstract class is a class that cannot be instantiated on its 
 own.
 abstract class Mathematics{
 /*** child class must define these methods ***/
 abstract protected function getMessage();
 abstract protected function add($num);
 /**
 * method common to both classes
 **/
 public function showMessage() {
 echo $this->getMessage();
 }
 }
 22
 Abstract class
require_once 'Mathematics.php';
class myMath extends Mathematics {
 protected function getMessage() {
 return "The anwser is: ";
 }
 public function add($num) {
 return $num + 2;
 }
}
// A new instance of myMath
$myMath = new MyMath ();
$myMath->showMessage ();
echo $myMath->add (4);
 The anwser is: 6
 23
 Interfaces
− An interface declares one or more methods.
− Must be implemented by any class that implements the 
 interface.
 interface MyInterface {
 public function aMethod();
 public function anotherMethod();
 }
 class MyClass implements MyInterface {
 public function aMethod() {
 // (code to implement the method)
 }
 public function anotherMethod() {
 // (code to implement the method)
 }
 }
 24
interface Persistable {
 public function save();
 public function load();
 public function delete();
}
require_once 'Persistable.php'; public function save() {
class Member implements Persistable { echo "Saving member to 
 private $username; database";
 private $location; }
 private $homepage; public function load() {
 public function __construct( $username, echo "Loading member from 
 $location, $homepage ) { database";
 $this->username = $username; }
 $this->location = $location; public function delete () {
 $this->homepage = $homepage; echo "Deleting member from 
 } database";
 public function getUsername() { }
 return $this->username; }
 }
 public function getLocation() { $m = new Member("Aha", "VN", "No page");
 return $this->location; echo $m->getUsername() . "";
 } $m->load();
 public function getHomepage() { //...
 return $this->homepage;
 Aha
 }
 Loading member from database
class Topic implements Persistable {
 private $subject;
 private $author;
 private $createdTime;
 public function __construct( $subject, $author ) {
 $this->subject = $subject;
 $this->author = $author;
 $this->createdTime = time();
 }
 public function showHeader() {
 $createdTimeString = date( 'l jS M Y h:i:s A', $this->createdTime );
 $authorName = $this->author->getUsername();
 echo "$this->subject (created on $createdTimeString by $authorName)";
 }
 public function save() {
 echo "Saving topic to database";
 }
 public function load() {
 echo "Loading topic from database";
 }
 public function delete () {
 echo "Deleting topic from database";
 }
}
Test.php
require_once 'Member.php';
require_once 'Topic.php';
$aMember = new Member ( "TUI", "Viet Nam", "" );
echo $aMember->getUsername () . " lives in " . $aMember->getLocation () . "";
$aMember->save ();
$aTopic = new Topic ( "PHP is Great", $aMember );
$aTopic->showHeader ();
$aTopic->save ();
TUI lives in Viet Nam
Saving member to database
PHP is Great (created on Saturday 17th Dec 2016 03:00:07 AM by TUI)
Saving topic to database
 Autoloading classes
− Create a function called __autoload() near the start of
 your PHP application.
− PHP automatically calls your __autoload() function.
 function __autoload($className) {
 require_once ("$className.php");
 echo "Loaded $className.php";
 }
 $member = new Member("TUI", "Viet Nam", "No page");
 echo "Created object: ";
 print_r ( $member );
 Loaded Member.php
 Created object: Member Object ( [username:Member:private] => TUI 
 [location:Member:private] => Viet Nam [homepage:Member:private] => No page ) 
 28
 Anonymous functions
− Anonymous functions have no name. 
 // Assign an anonymous function to a variable
 $makeGreeting = function ($name, $timeOfDay) {
 return ('Good ' . $timeOfDay . ', ' . $name);
 };
 // Call the anonymous function
 echo $makeGreeting ( 'Tom', 'morning' ) . '';
 echo $makeGreeting ( 'Jerry', 'afternoon' ) . '';
 Good morning, Tom
 Good afternoon, Jerry
 29
 Closures
− A closure is an anonymous function that can access variables 
 imported from the outside scope without using any global 
 variables.
 function myClosure($num) {
 return function ($x) use ($num) {
 return $num * $x;
 };
 }
 $closure = myClosure ( 10 );
 echo $closure ( 2 );
 echo $closure ( 3 );
 20
 30
 30
 Namespaces
− Namespaced code is defined using a singlenamespace 
 keyword at the top of your PHP file. 
− It must be the first command (with the exception ofdeclare) 
 and no non-PHP code, HTML, or white-space
 // define this code in the 'MyProject' namespace
 namespace MyProject;
 // ... code ...
 31
Cat.php Animal.php
namespace foo; namespace other\animate;
class Cat { class Animal {
 static function says() { static function breathes() {
 echo 'Meoow'; echo 'Air';
 } }
} }
Dog.php Test.php
namespace bar; namespace test;
class Dog { include 'Cat.php';
 static function says() { include 'Dog.php';
 echo 'Ruff'; include 'Animal.php';
 } use foo as cat;
} use bar as dog;
 //use other\animate;
 use other\animate as animal;
Result: echo cat\Cat::says (), "";
Meoow echo dog\Dog::says (), "";
Ruff echo animal\Animal::breathes ();
Air //echo \other\animate\Animal::breathes ();File đính kèm:
bai_giang_phat_trien_ung_dung_web_bai_5_object_oriented_prog.pdf

