Sử dụng _get() và _set() (tiếp tục)
Xem lại đoạn script trong học phần sau:
Đoạn script làm việc như thế nào
Đoạn script này tạo một class Car quen thuộc chứa một vài đặc tính public cố định là
$manufacturer, $model và $color – và cũng thêm một đặc tính mảng private $_extraData. Class
Car cũng chứa một phương thức _get() cái tìm kiếm tên đặc tính được yêu cầu trong các key
của mảng $_extraData, trả về giá trị tương ứng trong mảng (nếu tìm thấy). Phương thức
_set() tương ứng lấy tên và giá trị đặc tính được cung cấp trong mảng $_extaData, được chỉ
số hoá bằng tên đặc tính.
Để kiểm tra các phương thức này, đoạn script tạo một object của class Car mới, $myCar và thiết
lập 5 đặc tính. Ba đặc tính đầu tiên là các đặc tính thực sự trong class Car là
$manufacturer, $model và $color. Những đặc tính này được thiết lập thành “Volkswagen” , “Beetle” ,
và “red”. Đặc tính thứ 4, $engineSize không tồn tại trong class, vì vậy phương thức _set()
được gọi, cái này đến lượt nó tạo một phần tử mảng trong $_extraData với key
là “engineSize” và value 1.8.
Tương tự, đặc tính thứ 5, $otherColors không tồn tại trong class Car vì vậy _set() được gọi, tạo
một phần tử mảng trong $_extraData với một key là “otherColors” cái lưu giữ giá trị được truyền
vào, cái trong trường hợp này là một mảng chứa các chuỗi kí tự “green” , “blue” , và “purple”.
Tiếp theo, đoạn script hiển thị các giá trị của một vài đặc tính của object $myCar. Chú ý là
đối với code gọi, đặc tính $engineSize là có thật như đặc tính $manufacturer, mặc dù $engineSize
không tồn tại trong class Car. Đoạn script cũng cố gắng lấy giá trị của đặc tính được gọi là
$fueltype, vì cái này không tồn tại trong class cũng như trong mảng $_extraData, phương thức
_get() trả về null đối với code gọi. Điều này giải thích tại sao không có giá trị nào được
hiển thị trên trang trình duyệt.
Cuối cùng, đoạn script duyệt nội dung của object $myCar sử dụng print_r(). Nhận
thấy là các đặc tính thêm – $engineSize và $otherColors được lưu giữ trong mảng $_extraData private.
(Bạn có thể thấy rằng print_r() cũng hiển thị các đặc tính private bên trong object, cái rất hữu dụng
cho tìm lỗi code).
Mặc dù các đặc tính không tồn tại này được lưu giữ trong mảng private trong ví dụ này, nó có thể
được lưu giữ dễ dàng trong một file hay bảng CSDL, hoặc được truyền qua API tới một ứng dụng khác.
Điều này đem lại cho bạn một vài điều về khả năng của _get() và _set().