+2

PHP Language - Vài Phút Phút Tìm Hiểu Public, Protected và Private

Lâu rồi mình cũng chưa có ra bài viết mới nhân tiện vừa tròn 2 tháng chuyển qua team Backend. Được vật lộn với đống Unit TestPHP nên mình cũng có vài thứ để chia sẽ cho các anh em, ahihi.

Hôm nay chúng ta sẽ nói về Public, ProtectedPrivate ở hàm hoặc biến trong ngôn ngữ PHP nói riêng hoặc OOP nói chung.

Chúng Là Cái Chi Chi:

Ở trên mạng thì có rất nhiều bài viết định nghĩa rồi, ở đây mình chỉ tóm tắt ngắn ngọn lại như sau:

Public: là kiểu dữ liệu khai báo thuộc loại công cộng, những phương thức hoặc biến với kiểu dữ liệu này sẽ được truy xuất và sử dụng ở đâu cũng được.

Private: là kiểu kiểu dữ liệu khai báo thuộc loại nội bộ, những phương thức hoặc biến với kiểu dữ liệu này sẽ được truy xuất và sử dụng trong nội bộ của Class nơi mà phương thức hoặc biến đó được khai báo.

Protected: là kiểu dữ liệu khai báo cũng thuộc loại nội bộ như Private, nhưng thêm vào đó những phương thức hoặc biến với kiểu dữ liệu này ngoài việc sử dụng trong nội bộ Class, chúng còn có thể được truy xuất ở Class con kế thừa Class khai báo hàm hoặc phương thức đó.

alt text

Ví Dụ:

Để hiểu thêm về những khái niệm trên chúng ta sẽ cùng nhau làm rõ sương sương qua ví dụ nho nhỏ như sau:
class Human
{
  private $year;
  protected $beauty = 'Xau';
  public function getOld() :int
  {
    return $this->calculateOld();
  }

  private function calculateOld() :int
  {
    return 2019-$this->year;
  }
  public function setYear($year) :int
  {
     return $this->year = $year;
  }
}

class HungPham extends Human
{
  public function seeBeauty() :string
  {
    return $this->beauty;
  }
}

$human = new Human;
$human->setYear(2000);
echo($human->getOld()); // kết quả là 19
$hung = new HungPham;
echo($hung->seeBeauty()); // kết quả là Xau

Ở đây mình có một Abstract ClassHuman, sau khi new một instance mới( new Human ), mình sẽ gọi hàm setYear để đẩy giá trị 2000 vào.

Ở đây hàm setYear phải là kiểu public vì mình cần truy cập nó ở bên ngoài phạm vi Class Human.

Giả sử mình cần giấu thông tin của Class Human( vì một lý do bảo mật nào đó ), đặc biệt là hàm calculateOld do đó mình cần phải khai báo nó dưới dạng private.

Bởi hàm calculateOld được khai báo là kiểu private nên mình sẽ ko truy xuất được trực tiếp bằng cách gọi ($human->calculateOld) đó là lý do vì sao mình cần có thêm hàm getOld được khai báo theo kiểu public.

Ở ví dụ tiếp theo mình có một Class con là HungPham kế thừa từ Class Human, để hàm seeBeauty có thể truy cập được biến beauty ở Class cha mình cần phải khai báo nó dưới dạng là protected

Dễ hiểu phải không các anh em 😆 😆 😆

Cách Sử Dụng:

Khi nào dùng những hàm Set hoặc Get, chúng cần dùng thuộc tính public cho phương thức của mình vì nó cần được truy cập ở ngoài Class.

Đối với nhưng phương thức tính toán mang tính chất cốt lõi của Class hãy nên sử dụng private.

Còn protected được sử dụng trong trường hợp Class con muốn truy cập giá trị một biến hoặc một phương thức từ Class cha.

Kết Luận:

Bằng cách nắm kỹ những kiến thức cơ bản này, mình nghĩ nó sẽ giúp các anh em đỡ bị ngộp khi đọc code của người khác.

Nếu bài viết còn chỗ nào chưa đúng mong sẽ nhận được những phản hồi tích cực từ các anh em. Hẹn gặp lại vào một bài viết khác vào một ngày không xa. ahihi 😄 😄 😄

Link bài viết gốc của mình ở link bên dưới nhé:

https://hungphamdevweb.com/php-language-vai-phut-phut-tim-hieu-public-protected-va-private.html


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí