Hướng dẫn dùng is set trong PHP
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é. Show Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. 1. Tìm hiểu set và get trong PHPSet 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('freetuts.net'); Ví dụ: về get Bài viết này được đăng tại [free tuts .net] 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('freetuts.net'); // 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 phpBâ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 publicNếu bạn để ý kỹ trong ví dụ trên thì hai thuộc tính Trường hợp muốn xử lý trước khi gán hoặc lấy dữ liệuTrườ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('freetuts.net'); 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 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à __setTrong 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: Trong đó:
Cú pháp hàm get: Trong đó
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 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. |