Lập trình hướng đối tượng OOP trong PHP

Một kiến thức cực kỳ cực kỳ quan trọng khi học lập trình đó là lập trình hướng đối tượng OOP, nếu bạn chưa nắm kiến thức này thì hãy đọc ngay bài viết dưới đây nhé!

I. Tìm hiểu về lập trình hướng đối tượng OOP?

1. Đối tượng là gì?

Đối tượng là những vật thể hay thực thể mang 2 đặc điểm chung là trạng thái và hành vi.

Ví dụ 

  • Con chó là 1 đối tượng có trạng thái (tên, màu sắc, loại, tình trạng đói hay no) và hành vi (sủa, tha đồ vật, vẫy đuôi).
  • Xe đạp là 1 đối tượng cũng có trạng thái (bánh răng, nhịp bàn đạp hiện tại, tốc độ hiện tại) và hành vi (thay đổi bánh răng, thay đổi nhịp bàn đạp, sử dụng phanh). 
  • Sinh viên là 1 đối tượng có trạng thái(tên, tuổi, giới tính) và hành vi (nhập điểm, nộp học phí ...)

2. Lập trình hướng đối tượng OOP là gì?

OOP viết tắt của Object-Oriented Programming.

Lập trình hướng đối tượng OOP là phương pháp lập trình với các câu lệnh, cú pháp mới đồng thời cách tư duy lập trình cũng được đổi mới. Đối với phương pháp lập trình truyền thống hướng thủ tục chúng ta sẽ viết các thủ tục hoặc hàm thực hiện các thao tác trên dữ liệu, trong khi lập trình hướng đối tượng là tạo các đối tượng chứa cả dữ liệu và hàm. 

3. Ưu điểm của lập trình hướng đối tượng OOP

  • Lập trình hướng đối tượng OOP giúp nhanh hơn và dễ thực thi hơn.
  • Lập trình hướng đối tượng OOP cung cấp một cấu trúc rõ ràng cho các chương trình.
  • Lập trình hướng đối tượng OOP giúp cho các đoạn mã không bị lặp lại và giúp dễ bảo trì, sửa đổi và gỡ lỗi hơn.
  • Lập trình hướng đối tượng OOP giúp bạn có thể tạo các ứng dụng có thể tái sử dụng đầy đủ với ít đoạn mã hơn và thời gian phát triển ngắn hơn.

4. Các tính chất và đặc trưng trong lập trình hướng đối tượng OOP

a. Trong lập trình hướng đối tương OOP có 2 đặc trưng quan trọng

  • Đặc trưng sử dụng lại, tái sử dụng mã nguồn (source reusability) thể hiện qua cơ chế kế thừa.
  • Đặc trưng che dấu thông tin (data hidding) thể hiện qua định nghĩa class.

b. Trong lập trình hướng đối tượng OOP có 4 tính chất quan trọng

  • Tính trừu tượng (abstraction): chọn ra các thuộc tính, phương thức của đối tượng cần cho việc giải quyết bài toán đang lập trình
  • Tính kế thừa (inheritance): 1 lớp có thể định nghĩa dựa vào 1 lớp khác và có thể thừa kế lại thuộc tính và phương của lớp khác, tận dụng được mã nguồn, không phải định nghĩa lặp lại, tái sử dụng mã nguồn 1 cách tối ưu.
  • Tính đóng gói (encapsulation): các thuộc tính và phương thức của đối tượng cần cho việc giải quyết bài toán đã được chọn ra sẽ được đóng gói vào 1 kiểu dữ liệu gọi là class. Nhằm che dấu thông tin khỏi các đối tượng bên ngoài, thuộc tính nào thì phương thức nấy.
  • Tính đa hình (polymorphism): lớp dẫn xuất kế thừa lớp cơ sở thì ở lớp dẫn xuất phương thức có thể được viết lại thực hiện các hành động riêng cho phù hợp với lớp dẫn xuất.

5. Khái niệm cơ bản trong lập trình hướng đối tượng OOP

a. Class

Class là một khuôn mẫu cho các object và một object là một trường hợp của class. Điều này có nghĩa là khi 1 object được tạo nó sẽ kế thừa các thuộc tính và phương thức của class nhưng mỗi object sẽ có những thông tin giá trị khác nhau.

Class được định nghĩa bằng cách sử dụng từ khóa class, theo sau là tên của class và một cặp dấu {}.

Cú pháp khởi tạo một Class

<?php
class Ten_Class {
  // Code của bạn ở trong này
}
?>

Ví dụ chúng ta tạo một class tên là Fruit bao gồm hai thuộc tính ($name và $color) và hai phương thức set_name() và get_name().

<?php
class Fruit {
  //Thuộc tính
  public $name;
  public $color;

  // Phương thức
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
?>

Lưu ý: Trong một Class, các biến được gọi là thuộc tính và các hàm được gọi là phương thức!

b. Object

Class sẽ không có ý nghĩa nếu không có object.

Chúng ta có thể tạo nhiều object từ một class. 

Mỗi object sẽ có tất cả các thuộc tính và phương thức được định nghĩa trong class, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.

Để khởi tạo 1 object ta sử dụng từ khoá new

Ví dụ ta khởi tạo 2 object để kế thừa class Fruit trên như sau

<?php
class Fruit {
  // Thuộc tính
  public $name;
  public $color;

  // Phương thức
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

// Khởi tạo 2 đối tượng $apple và $banana
$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');

echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>

c. Biến $this

Biến $this dùng để trỏ đến object hiện tại và chỉ có sẵn bên trong các phương thức. Có nghĩa là từ một phương thức trong Class bạn muốn truy cập đến thuộc tính, phương thức trong Class đó thì bạn sử dụng biến $this.

Ví dụ chúng ta có class Fruit có thuộc tính $name, để thay đổi thuộc tính $name chúng ta sẽ làm gì.

<?php
class Fruit {
  public $name;
}
$apple = new Fruit();
?>

Có 2 cách để thay đổi thuộc tính $name trong ví dụ trên

Cách 1 chúng ta thêm phương thức set_name() và sử dụng biến $this

<?php
class Fruit {
  public $name;
  function set_name($name) {
    $this->name = $name;
  }
}
$apple = new Fruit();
$apple->set_name("Apple");
?>

Cách 2 thay đổi trực tiếp giá trị thuộc tính $name

<?php
class Fruit {
  public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
?>

d. Hàm instanceof

Để kiểm tra một object có thuộc một class cụ thể hay không ta dùng hàm instanceof.

Ví dụ

<?php
class Fruit {
  // Thuộc tính
  public $name;
  public $color;

  // Phương thức
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit();
var_dump($apple instanceof Fruit);
?>

 

II. Hàm tạo Constructor và hàm huỷ Destructor

Trong lập trình hướng đối tượng OOP để cho việc sử dụng các đối tượng được dễ dàng hơn, PHP đã cung cấp một số Magic Method hay còn được gọi là các phương thức đặc biệt dùng để xử lý các hành động nhất định xảy ra trong các đối tượng(Object). Hàm tạo Constructors và hàm huỷ Destructor là 2 phương thức đặc biệt quan trọng được sử dụng nhiều nhất trong lập trình hướng đối tượng OOP.

1. Hàm tạo Constructor

Hàm tạo Constructor cho phép bạn khởi tạo các thuộc tính của đối tượng khi tạo đối tượng.

Nếu bạn tạo một hàm __construct (), PHP sẽ tự động gọi hàm này khi bạn tạo một đối tượng từ một class.

Lưu ý:  Hàm construct bắt đầu bằng 2 dấu gạch dưới __

Ví dụ khi không dùng hàm __construct ta có đoạn mã sau

<?php
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
  function set_color($color) {
    $this->color = $color;
  }
  function get_color() {
    return $this->color;
  }
}

$apple = new Fruit();
$apple->set_name('Apple');
$apple->set_color('Red');
echo "Name: " . $apple->get_name();
echo "<br>";
echo "Color: " . $apple->get_color();
?>

khi dùng hàm __construct ta có đoạn mã sau

<?php
class Fruit {
  public $name;
  public $color;

  function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  function get_name() {
    return $this->name;
  }
  function get_color() {
    return $this->color;
  }
}

$apple = new Fruit("Apple", "red");
echo $apple->get_name();
echo "<br>";
echo $apple->get_color();
?>

Trong ví dụ trên chúng ta đã khởi tạo sẵn 2 thuộc tính $name và $color trong hàm __construct, ta sẽ không cần thêm 2 phương thức set_name() và set_color(), điều này giúp cho đoạn mã ngắn gọn hơn.

2. Hàm huỷ Destructor

Hàm huỷ Destructor được gọi khi đối tượng bị hủy hoặc tập lệnh bị dừng.

Nếu bạn tạo một hàm __destruct (), PHP sẽ tự động gọi hàm này ở cuối tập lệnh.

Lưu ý:  Hàm destruct bắt đầu bằng 2 dấu gạch dưới __

Ví dụ

<?php
class Fruit {
  public $name;
  public $color;

  function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  function __destruct() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

$apple = new Fruit("Apple", "red");

// Kết quả: The fruit is Apple and the color is red.
?>

Trong ví dụ trên ta thấy rõ hàm __destruct đã được tự động gọi khi ở cuối chương trình.

Bài viết nên đọc

Trên đây là những kiến thức từ kinh nghiệm bản thân mình nên các bạn có thể tham khảo. Nếu các bạn có góp ý cho mình thì hãy gửi vào đây, mình sẵn sàng nhận ý kiến đóng góp từ các bạn.

Ngoc Phuong

Ngoc Phuong - 82 bài viết - Đánh giá:

Có 2 cách học hiệu quả nhất, 1 là nói cho người khác biết thứ bạn mới học được, 2 là nói cho người khác biết thứ bạn sắp quên. Tôi mới học được rất nhiều thứ. Tôi cũng sắp quên rất nhiều thứ.

Để lại bình luận

Địa chỉ email của bạn sẽ không được công khai

Hoàng Khải Luân

Hoàng Khải Luân 3 năm trước

hay!!!

Trả lời

Để lại bình luận

Địa chỉ email của bạn sẽ không được công khai

Admin

Admin 3 năm trước

Cảm ơn bạn!

Trả lời

Để lại bình luận

Địa chỉ email của bạn sẽ không được công khai