Hướng dẫn khái niệm về lập trình hướng đối tượng (OOP) PHP với ví dụ

OOP là gì?

Hướng đối tượng là một cách tiếp cận để phát triển phần mềm mô hình hóa ứng dụng xung quanh các đối tượng trong thế giới thực như nhân viên, ô tô, tài khoản ngân hàng, v.v. Một lớp xác định các thuộc tính và phương thức của một đối tượng trong thế giới thực. Một đối tượng là một sự xuất hiện của một lớp.

Ba thành phần cơ bản của hướng đối tượng là;

  • Phân tích hướng đối tượng – chức năng của hệ thống
  • Thiết kế hướng đối tượng – kiến ​​trúc hệ thống
  • Lập trình hướng đối tượng – triển khai ứng dụng

Nguyên tắc lập trình hướng đối tượng

Ba nguyên tắc chính của OOP là;

  • Đóng gói – điều này liên quan đến việc ẩn các chi tiết triển khai và chỉ phơi bày các phương thức. Mục đích chính của việc đóng gói là;
  • Giảm độ phức tạp khi phát triển phần mềm – bằng cách ẩn các chi tiết triển khai và chỉ hiển thị các hoạt động, việc sử dụng lớp trở nên dễ dàng.
  • Bảo vệ trạng thái bên trong của một đối tượng – quyền truy cập vào các biến của lớp được thực hiện thông qua các phương thức như get và set, điều này làm cho lớp trở nên linh hoạt và dễ bảo trì.
  • Việc triển khai nội bộ của lớp có thể được thay đổi mà không phải lo lắng về việc phá vỡ mã sử dụng lớp đó.
  • di sản – điều này liên quan đến mối quan hệ giữa các lớp. Mối quan hệ có hình thức của cha mẹ và con cái. Đứa trẻ sử dụng các phương thức được định nghĩa trong lớp cha. Mục đích chính của thừa kế là;
  • Khả năng sử dụng lại – một số con có thể kế thừa từ cùng một cha/mẹ. Điều này rất hữu ích khi chúng ta phải cung cấp các chức năng phổ biến như thêm, cập nhật và xóa dữ liệu khỏi cơ sở dữ liệu.
  • Tính đa hình – điều này liên quan đến việc có một hình thức duy nhất nhưng có nhiều cách thực hiện khác nhau. Mục đích chính của đa hình là;
  • Đơn giản hóa việc duy trì các ứng dụng và làm cho chúng có khả năng mở rộng cao hơn.

Giáo sư Concepts bằng PHP

PHP là ngôn ngữ kịch bản hướng đối tượng; nó hỗ trợ tất cả các nguyên tắc trên. Các nguyên tắc trên đạt được thông qua;

  • Đóng gói – thông qua việc sử dụng các phương thức “get” và “set”, v.v.
  • di sản – thông qua việc sử dụng từ khóa mở rộng
  • Tính đa hình – thông qua việc sử dụng từ khóa thực hiện

Bây giờ chúng ta đã có kiến ​​thức cơ bản về OOP và cách nó được hỗ trợ trong PHP, chúng ta hãy xem các ví dụ thực hiện các nguyên tắc trên

UML là gì?

Ngôn ngữ mô hình hóa thống nhất UML là một kỹ thuật được sử dụng để thiết kế và ghi lại các hệ thống hướng đối tượng.

UML tạo ra một số tài liệu, nhưng chúng ta sẽ xem xét sơ đồ lớp, điều này rất quan trọng đối với lập trình php hướng đối tượng.

Ví dụ về sơ đồ lớp

Giáo sư Concepts bằng PHP

Khóa sơ đồ lớp

  • Hộp trên chứa tên lớp
  • hộp giữa chứa các biến lớp
  • hộp dưới chứa các phương thức lớp
  • dấu trừ (-) ký có nghĩa là phạm vi riêng tư
  • cộng (+) dấu hiệu có nghĩa là phạm vi công cộng
  • hàm băm (#) dấu hiệu có nghĩa là phạm vi được bảo vệ

Cách tạo một lớp trong PHP

Từ khóa class được sử dụng để định nghĩa một lớp trong PHP. Dưới đây là các quy tắc để tạo một lớp trong PHP.

  • Tên lớp nên bắt đầu bằng một chữ cái
  • Tên lớp không thể là từ dành riêng cho PHP
  • Tên lớp không được chứa dấu cách

Giả sử chúng ta muốn tạo một lớp đại diện cho động vật.

Chúng ta sẽ bắt đầu bằng việc xác định những đặc điểm chung của tất cả các loài động vật.

  • Tất cả các loài động vật đều thuộc một gia đình như động vật ăn cỏ, lễ hội, v.v.
  • Tất cả các loài động vật đều ăn thức ăn

Hình vẽ dưới đây thể hiện sơ đồ của con vật

Tạo một lớp trong PHP

Bây giờ hãy mã hóa lớp động vật của chúng ta

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food   = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?>

ĐÂY,

  • “private $family, $food” có nghĩa là các biến không thể được truy cập trực tiếp bên ngoài lớp (Đóng gói).
  • “hàm công cộng __construct($family…)” là phương thức xây dựng php. Hàm này được gọi bất cứ khi nào một thể hiện của lớp được tạo. Trong trường hợp này, chúng ta đang sắp xếp gia đình và thức ăn.
  • “hàm công khai get…()” là phương thức được sử dụng để truy cập giá trị gia đình hoặc thực phẩm (Đóng gói)
  • “bộ hàm công khai…()” là phương thức được sử dụng để đặt giá trị gia đình hoặc thực phẩm (Đóng gói)

Cách triển khai Kế thừa trong PHP

Chúng ta sẽ làm việc với một con bò và một con sư tử. Cả bò và sư tử đều kế thừa từ lớp Động vật.

Sơ đồ lớp dưới đây cho thấy các mối quan hệ.

Triển khai tính kế thừa trong PHP

Lưu ý con bò kế thừa từ lớp động vật và cũng xác định biến cũng như phương thức của riêng nó.

Bây giờ chúng ta hãy mã hóa lớp Cow

<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

Bây giờ chúng ta hãy viết mã lớp Lion

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

ĐÂY,

  • “lớp … mở rộng Động vật” khiến bò và sư tử sử dụng các phương thức từ lớp Động vật (Kế thừa).

Cách tạo đối tượng của lớp

Vì mục đích đơn giản, các lớp Động vật, Bò và Sư tử nên nằm trong cùng một thư mục.

Bây giờ hãy tạo ứng dụng sử dụng các lớp của chúng ta.

Ví dụ về lớp PHP

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow  = new Cow('Herbivore', 'Grass');
$lion = new Lion('Canirval', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

Kiểm tra ứng dụng của chúng tôi

Bây giờ hãy xem ứng dụng của chúng tôi trong trình duyệt web

Kế thừa trong PHP

Tuyệt vời đúng không! Bây giờ chúng ta hãy xem nguyên tắc thứ ba của OOP, tính đa hình.

Giả sử chúng tôi muốn phát triển một ứng dụng kết nối với các công cụ cơ sở dữ liệu khác nhau như MySQL và SQL Server nhưng sử dụng chung một giao diện thống nhất.

Chúng ta có thể tạo một giao diện xác định các phương thức tiêu chuẩn và một lớp trừu tượng triển khai các phương thức chung.

  • Giao thức – nó tương tự như một lớp học. Nó chỉ định nghĩa các phương thức và tham số.
  • Lớp trừu tượng – đó là lớp không thể được sử dụng để tạo đối tượng một cách trực tiếp. Mục đích của nó là cung cấp việc triển khai một phần hoặc toàn bộ các phương pháp phổ biến.

Sơ đồ lớp bên dưới minh họa mối quan hệ giữa lớp trừu tượng, lớp giao diện và lớp triển khai của chúng ta.

Kế thừa trong PHP

Bây giờ chúng ta hãy tạo lớp trừu tượng của chúng ta

<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host     = $host;
        $this->db       = $db;
        $this->uid      = $uid;
        $this->password = $password;
    }
}
?>

ĐÂY,

  • "lớp trừu tượng" có nghĩa là lớp không thể được sử dụng trực tiếp cho đối tượng tạo php
  • “$host,$db…” là các biến lớp chung cho tất cả các triển khai
  • “hàm __construct(…)” là phương thức xây dựng của lớp php đặt các giá trị biến chung khi khởi tạo

Bây giờ chúng ta hãy tạo giao diện chứa các phương thức tiêu chuẩn sẽ được triển khai khác nhau tùy thuộc vào công cụ cơ sở dữ liệu.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

ĐÂY,

  • “giao diện” là từ khóa để tạo giao diện
  • “chức năng công cộng…(…)” là những phương pháp tiêu chuẩn cần được triển khai

Bây giờ chúng ta hãy tạo các lớp cụ thể sẽ mở rộng lớp DBCommonMethods và mở rộng giao diện DBInterface. MySQLDriver.php

<?php class MySQLDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) 
{ 
parent::__construct($host, $db, $uid, $password); } 
public function db_connect() { //connect code goes here } 
public function delete($where) { //delete code goes here } 
public function insert($data) { //insert code goes here } 
public function read($where) { //read code goes here } 
public function update($where) { //update code goes here } 
} ?>

MSSQLServerDriver.php

<?php 
class MSSQLServerDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password)
 { 
 parent::__construct($host, $db, $uid, $password); } 
 public function db_connect() { //connect code goes here } 
 public function delete($where) { //delete code goes here }
 public function insert($data) { //insert code goes here }
 public function read($where) { //read code goes here }
 public function update($where) { //update code goes here }
 } ?>

ĐÂY,

  • “class … mở rộng DBCommonMethods” sử dụng các phương thức trong DBCommonMethods
  • “… triển khai DBInterface” đảm bảo rằng lớp này cung cấp các phương thức tiêu chuẩn bất kể trình điều khiển cơ sở dữ liệu được sử dụng.

Cách sử dụng đoạn mã trên Đoạn mã sử dụng lớp trên sẽ trông như thế này

<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>

Or

<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>

Phần còn lại của mã sẽ giống nhau đối với cả hai trình điều khiển, chẳng hạn như;

<?php
$db->db_connect();
$db->insert($data);
?>

Tổng kết

  • Lập trình hướng đối tượng OOP là một kỹ thuật mạnh mẽ mô hình hóa các ứng dụng theo các đối tượng trong thế giới thực
  • Lớp là sự thể hiện của các đối tượng trong thế giới thực với các thuộc tính và phương thức
  • Ba nguyên tắc cơ bản của OOP là;
  • Đóng gói
  • di sản
  • Tính đa hình