Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Lập trình hướng đối tượng trong PHP
1. Biển Hoàng - DEHA Technology
bien@deha-soft.com
Object Oriented Programing
in PHP
Principles, Examples and Practices
2. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
Lập trình hướng đối tượng - OOP
OOP - Object Oriented Programing.
- Là phương pháp lập trình dựa trên các đối tượng của hệ thống.
- Các đối tượng trong lập trình, là “trừu tượng hóa” của các đối tượng trong thực tế.
- Là mô hình lập trình phổ biến nhất hiện nay.
- Giúp tổ chức code dễ đọc, dễ bảo trì, nâng cấp.
- Gồm 4 đặc tính: Trừu tượng, đa hình, kế thừa, đóng gói.
2
3. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Đối tượng - Object
3
- Là bất cứ thứ gì.
- Một Object có
+ Định danh - Identity
+ Có thuộc tính - Attribute & trạng thái.
+ Có hành vi - Behavior (có thể làm, bị làm).
- Một Object có thể chứa Object khác.
4. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Lớp - Class
4
- Class là một bản thiết kế - “blueprint” của Object
- Một Class được mô tả như sau
+ Name: Nó là gì?
+ Attribute: Nó được mô tả thế nào?
+ Behavior: Nó có thể làm gì?
- Từ 1 Class có thể tạo ra được
không giới hạn Object
5. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - 4 đặc tính
5
APIE
1. Abstraction
2. Polymorphism
3. Inheritance
4. Encapsulation
6. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Trừu tượng - Abstraction
6
● Chỉ quan tâm tới những đặc điểm tổng quát, mà không quan tâm tới cụ thể một
đối tượng.
● Bỏ qua những thứ không liên quan
● Bỏ qua những thứ không quan trọng
7. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Đóng gói - Encapsulation
7
● Che dấu đi đặc tính, hay hành vi của đối tượng.
● Chỉ cho phép 2 đối tượng tác động lên nhau theo cơ chế định trước.
8. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Kế thừa - Inheritance
8
● Cho phép một đối tượng sử dụng đặc tính, hành vi của đối tượng khác có cùng
loại mà không cần định nghĩa lại.
● Cho phép các đối tượng chia sẻ hoặc mở rộng các đặc tính, hành vi.
● Code reuse.
Ví dụ: Đối tượng “Chó Chihuahua" có những đặc tính và hành vi mà đối tượng
“Chó" có.
9. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Đa hình - Polymorphism
9
● Những đối tượng có hành vi giống nhau nhưng lại có cách thực hiện và kết quả
khác nhau.
Ví dụ: Chó và Mèo đều có hành vi “kêu", nhưng chó kêu “Gâu gâu" còn mèo
kêu “meo meo".
10. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Class trong PHP
10
class SimpleClass
{
// Property declaration
public $var = 'a default value';
// Method declaration
public function displayVar() {
echo $this->var;
}
}
11. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Thuộc tính và phương thức
11
// Property declaration
public $var = 'a default value';
// Method declaration
public function displayVar() {
echo $this->var;
}
12. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Khởi tạo Object
12
// Create new object from Class
$instance = new SimpleClass();
// Assign object to other variable
$assigned = $instance;
$reference =& $instance;
13. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Truy cập trong Class.
13
Sử dụng: $this
// Property declaration
public $var = 'a default value';
// Method declaration
public function displayVar() {
echo $this->var;
}
// To String
public function toString() {
return $this->displayVar()
}
14. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Kế thừa - Extends
14
class Foo
{
public function printItem($string)
{
echo 'Foo: ' . $string . PHP_EOL;
}
public function printPHP()
{
echo 'PHP is great.' . PHP_EOL;
}
}
class Bar extends Foo
{
public function printItem($string)
{
echo 'Bar: ' . $string . PHP_EOL;
}
}
15. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Abstract Class
15
Define
abstract class AbstractClass
{
abstract protected function getValue();
abstract protected function
prefixValue($prefix);
public function printOut() {
print $this->getValue() . "n";
}
}
Using
class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}
public function prefixValue($prefix) {
return "{$prefix}ConcreteClass1";
}
}
16. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Interface
16
Define
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
17. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Thực hiện - Implement
17
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach( $this->vars as $name => $value) {
$template = str_replace ('{' . $name . '}', $value, $template);
}
return $template;
}
}
18. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Access Modifier
18
● Public: Có thể truy cập được từ mọi nơi.
● Protected: Chỉ truy cập được từ chính nó Class nào kế thừa nó.
● Private: Chỉ cho phép truy cập trong nội tại Class.
19. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Access Modifier
19
class MyClass
{
// 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(); // All work
20. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Access Modifier
20
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
21. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Constructor
21
class BaseClass {
function __construct() {
print "In BaseClass
constructorn";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass
constructorn";
}
}
class OtherSubClass extends BaseClass {
// inherits BaseClass's constructor
}
// In BaseClass constructor
$obj = new BaseClass();
// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();
// In BaseClass constructor
$obj = new OtherSubClass();
22. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Static
22
● Một thuộc tính hoặc phương thức được khai báo “static" thì có thể truy cập mà không
cần phải khởi tạo Object từ Class.
● Một thuộc tính “static" thì không thể truy cập từ Object được khởi tạo từ Class.
● Một phương thức “static" thì có thể truy cập từ Object được khởi tạo từ Class.
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
23. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Final
23
● Một phương thức được khai báo là “final" thì không cho phép các lớp con kế
thừa nó thay đổi lại nội dung phương thức.
● Một Class được khai báo là “final" thì không cho phép Class khác kế thừa.
class BaseClass {
final public function moreTesting() {
echo "BaseClass::moreTesting() calledn";
}
}
final class BaseClass {
final public function moreTesting() {
echo "BaseClass::moreTesting() calledn";
}
}
24. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - PHP Namespace
24
● Sử dụng để nhóm 1 hoặc nhiều Class vào thành 1 nhóm.
● Có tác dụng để gói các phần của chương trình vào thành 1 gói cho dễ quản lý.
● Cho phép tồn tại các Class có tên cùng nhau nhưng khác Namespace.
● Quản lý mã nguồn và chương trình dễ dàng hơn.
25. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - PHP Namespace
25
namespace myname;
class MyClass {
public function myfunction() {
echo “Hello World";
}
}
$a = new MyClass();
$a->myfunction(); // Hello World
$c = new mynameMyClass();
$c->myfunction() // Hello World
26. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Trait
26
● Là cách tái sử dụng Code trong PHP.
● Loại bỏ đi 1 số nhược điểm của việc đơn kế thừa.
● Trait chỉ bao gồm phương thức và không thể khởi tạo Object từ Trait.
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
}
27. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Magic method - Đọc thêm.
27
● Là những phương thức phản ứng lại sự kiện diễn ra trong 1 Object.
● Một số Magic Method thường dùng
__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
_wakeup()
__toString()
__invoke()
__set_state()
__clone()
__debugInfo()
__sleep()
28. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Mô hình MVC
28
Bạn có thực sự hiểu đúng?
29. Object Oriented Programing in PHP - Biển Hoàng - http://deha.ai
OOP - Mô hình MVC
29
Là một “Architecture Pattern” trong xây dựng hệ thống.
- Model: Chứa Logic xử lý nghiệp vụ.
- Controller: Điều hướng, tương tác với Model và View
- View: Hiển thị dữ liệu, tương tác với Client side