PHP Language - Vài Phút Phút Tìm Hiểu Public, Protected và Private
Bài đăng này đã không được cập nhật trong 5 năm
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 Test và PHP 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
, Protected
và Private
ở 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 đó.
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 Class
là Human, 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ínhpublic
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