Học về Set, Get trong PHP

Học về Set, Get trong PHP là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Học về Set, Get trong PHP sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Nếu bạn đã từng làm việc với OOP trong C# thì chúng ta thường sử dụng hai hàm đặc biệt đó là set và get rất nhiều thì trong PHP chức năng nó cũng tương tự vậy thôi. Còn nếu bạn học PHP là ngôn ngữ đầu tiên thì hãy theo dõi những vấn đề dưới đây để hiểu thêm về hai phương thức này nhé.

1. Tìm hiểu set và get trong PHP

Set dịch sang tiếng anh nghĩa là thiết lập, còn get có nghĩa là lấy ra. Như vậy hai phương thức này giúp ta can thiệp vào quá trình thiết lập giá trị và lấy giá trị của một thuộc tính nào đó trong lớp.

Ví dụ: về set

class ClassName 
{
    private $__username;
    private $__password;
     
    function setUsername($value){
        $this->__username = $value;
    }
     
    function setPassword($value){
        $this->__password = $value;
    }
}
 
$class = new ClassName();
$class->setUsername('thehalfheart');
$class->setPassword('hoidapcode.com'); 

Ví dụ: về get

class ClassName 
{
    private $__username;
    private $__password;
     
    // SET
    function setUsername($value){
        $this->__username = $value;
    }
     
    function setPassword($value){
        $this->__password = $value;
    }
     
    // GET
    function getUsername(){
        return $this->__username;
    }
     
    function getPassword(){
        return $this->__password;
    }
     
}
 
$class = new ClassName();
 
// SET
$class->setUsername('thehalfheart');
$class->setPassword('hoidapcode.com');
 
// GET
echo $class->getUsername();
echo $class->getPassword(); 

Tới đây có lẽ bạn sẽ thắc mắc tại sao lại tạo các function set và get như vậy? Để trả lời thì ta vào phần 2 sau đây.

2. Tại sao và khi nào sử dụng set và get trong php

Bây giờ mình đưa ra một số trường hợp để ban hiểu rõ hơn vấn đề này. 

Trường hợp thuộc tính là private hoặc public

Nếu bạn để ý kỹ trong ví dụ trên thì hai thuộc tính $__username và $__password mình để chế độ private, như vậy ta không thể sử dụng nó ở ngoài lớp được. Nhưng đôi lúc ta muốn nó là private nhưng vẫn sử dụng được nó thì đòi hỏi ta phải truy xuất thông qua một function trung gian, và function trung gian này ta gọi là set và get.

Trường hợp muốn xử lý trước khi gán hoặc lấy dữ liệu

Trường hợp này có nghĩa là khi bạn muốn thực hiện một số thao tác nào đó trước khi người dùng gán hoặc lấy dữ liệu của thuộc tính. 

Ví dụ: xử lý get lúc gán

Giả sử như password thông thường lúc ta gán vào sẽ mã hóa md5 trước khi lưu vào trong CSDL, và mình muốn mã hóa theo quy tắc là thêm tiền tố hay hậu tố gì đó vào password trước khi mã hóa. Trong trường hợp nhiều coder làm chung dự án thì đôi lúc vấn đề này rất khó khăn, chính vì vậy đặt ra quy ước là khi gán password phải dùng set.

class ClassName 
{
    private $__password;
     
    function setPassword($value){
        $this->__password = md5('prefix'.$value);
    }
}
 
$class = new ClassName();
$class->setPassword('hoidapcode.com'); 

Lúc này các coder chỉ việc gọi hàm set này chứ ko cần thiết phải nhớ prefix là gì.

Ví dụ: xử lý set trước khi lấy

Khi bạn muốn hiển thị thông tin $username ra thì sẽ thêm chữ "tên đăng nhập:" vào đằng trước $username, giả sử bạn hiển thị 100 vị trí ở 100 file khác nhau. Sau này bạn không muốn hiển thị chữ tên đăng nhập đăng trước nữa mà muốn hiển thị "Your account is:" thì bạn phải vào 100 file sửa lại đúng không nào , điều này quá tệ. Để giải quyết nó thì ta sẽ tạo một hàm setUsername rồi khi hiển thị ra chỉ việc gọi tới hàm này, còn nội dung của hàm này là thêm dòng chữ như yêu cầu. Như vậy lúc cần đổi lại chữ thì chỉ việc vào function setUsername này mà đổi thôi.

class ClassName 
{
    private $__username = 'thehalfehart';
     
    function getUsername(){
        return 'Your account is '. $this->__username;
    }
}
 
$class = new ClassName();
$class->getUsername(); 

Quá đơn giản phải không nào, vấn đề được giải quyết triệt để.

3. PHP Magic method __get và __set

Trong PHP có cung cấp cho chúng ta hai hàm đặc biệt thuộc Magic methods đó là __set và __get. Hai hàm này sẽ tự động gọi khi bạn truy xuất hay gán đến một thuộc tính trong lớp.

Cú pháp hàm set: __set($key, $value).

Trong đó:

  • $key là tên thuộc tính
  • $value là giá trị thuộc tính

Cú pháp hàm get: __get($key).

Trong đó

  • $key là tên thuộc tính cần lấy

Ví dụ: __set trong php

class ClassName 
{
    public $username = '';
     
    function __set($key, $value){
        if ($key = 'somekey'){
            $this->username = $value;
        }
    }
     
}
 
$class = new ClassName();
$class->somekey = 'thehalfheart';
echo $class->username; // kết quả là thehalfheart 

Chạy lên kết quả là in ra màn hình là 'thehalfheart'. Rõ ràng mình không có gán giá trị này cho $username nhưng tại sao nó nhận? Lý do là hàm __set mình kiểm tra nếu $key == 'somekey' thì gán nó vào trong thuộc tính $username.

Ví dụ: __get trong php

class ClassName 
{
    public $username = 'thehalfheart';
     
    function __get($key){
        if ($key == 'somekey'){
            return $this->username;
        }
    }
     
}
 
$class = new ClassName();
echo $class->somekey;

Ui da, kết quả hàm get cũng là "thehalfheart". lý do như trên nhé.

Lời kết:

Bài này mình xin dừng ở đây, hy vọng qua bài này bạn hiểu được cách sử dụng get và set trong PHP, đồng thời biết đến hai hàm magic trong PHP đó là __set và __get thường hay sử dụng. Vấn đề trọng tâm của bài này là giúp bạn hiểu được khái niệm set và get, một số trường hợp sử dụng nó và một số demo. Chúc bạn học tốt.

Hy vọng với bài viết về Học về Set, Get trong PHP đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!