THÔNG TIN TÀI LIỆU
PHÁT TRIỂN ỨNG DỤNG WEB OBJECT ORIENTED PROGRAMMING Nguyễn Hữu Thể Content 10 11 12 13 14 Class Visibility Properties & Methods Getter & Setter Create objects Constructor Destructor Inheritance Abstract class Interfaces Autoloading classes Anonymous functions Closures Namespace Class class ClassName { // Properties // Methods } Visibility (public, private, protected) − Three levels: • public • private • protected − By default, all class members are public Properties & Methods class Person { private $name; //public, protected private $age; public function show(){ echo $this->name " is " $this->age " years old!"; } } Create objects (Create a new instance of the class) − Using the new keyword: new ClassName() − For example: $person = new PerSon(); $person2 = new PerSon(); Getter & Setter PHP JAVA class Person { private $name; private $age; class Person { private String name; private int age; public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getAge(){ return age; } public void setAge(int age){ this.age = 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; } } } class Person{ private $name; private $age; Ex: Person.php 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(); 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 get() method class GetName { public $type = 'chocolate'; public $choctype = array ( 'milk' => 0, 'dark' => 1, 'plain' => ); 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: 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(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // Works $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 { public function test() { $this->testPrivate(); $this->testPublic(); } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } public function testPublic() { echo "Bar::testPublic\n"; } } private function testPrivate() { echo "Bar::testPrivate\n"; } $myFoo = new Foo(); $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: 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'; class Member implements Persistable { private $username; private $location; private $homepage; public function construct( $username, $location, $homepage ) { $this->username = $username; $this->location = $location; $this->homepage = $homepage; } public function getUsername() { return $this->username; } public function getLocation() { return $this->location; } public function getHomepage() { return $this->homepage; } public function save() { echo "Saving member to database"; } public function load() { echo "Loading member from database"; } public function delete () { echo "Deleting member from database"; } } $m = new Member("Aha", "VN", "No page"); echo $m->getUsername() ""; $m->load(); // 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", "http://example.com" ); 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 ( ); echo $closure ( ); 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 namespace foo; class Cat { static function says() { echo 'Meoow'; } } Dog.php Animal.php namespace other\animate; class Animal { static function breathes() { echo 'Air'; } } Test.php namespace bar; namespace test; class Dog { static function says() { echo 'Ruff'; } } include 'Cat.php'; include 'Dog.php'; include 'Animal.php'; use foo as cat; use bar as dog; //use other\animate; use other\animate as animal; echo cat\Cat::says (), ""; echo dog\Dog::says (), ""; echo animal\Animal::breathes (); //echo \other\animate\Animal::breathes (); Result: Meoow Ruff Air ... 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... $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... 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
Ngày đăng: 30/10/2021, 05:15
Xem thêm: