Chúng ta đã tìm hiểu Lập trình hướng đối tượng là gì?. Tiếp bài viết này chúng ta sẽ tìm hiểu tiếp các cú pháp cơ bản trong lập trình hướng đối tượng PHP.
1. Khai báo lớp và thể hiện của lớp trong PHP
Như chúng ta đã biết, một lớp bao gồm các kiểu thuộc tính và phương thức. Trong PHP, chúng ta khai báo một lớp với cú pháp như sau.
1 2 3 4 |
class MyClass{ // Danh sách các biến, hằng, lớp... (thuộc tính) // Danh sách các hàm (phương thức) } |
Sau tạo ra class, bạn có thể khởi tạo và lưu trữ chúng trong một biến bằng cách sử dụng từ khóa new.
1 2 3 |
<?php $obj = new MyClass; ?> |
Để xem nội dung của class, bạn sử dụng hàm var_dump()
1 2 3 |
<?php var_dump($obj); ?> |
2. Định nghĩa thuộc tính của Class
Để thêm dữ liệu vào một class, người ta sử dụng thuộc tính, hoặc một biến riêng biệt nào đó. Chúng hoạt động tương tự như các biến thông thường, chỉ khác một điều là chúng đang liên kết với object và vì thế để có thể truy cập và sử dụng được chúng ta phải thông qua object hay nói cách khác là sử dụng object.
Để thêm một thuộc tính vào MyClass, bạn thêm đoạn mã sau vào script của bạn
1 2 3 4 5 6 7 |
<?php class MyClass { public $prop1 = "I'm a class property!"; } $obj = new MyClass; var_dump($obj); ?> |
Từ khóa public xác định tầm vực của thuộc tính. Tiếp đó, tên của thuộc tính được đặt đúng theo chuẩn cú pháp đặt tên cho biến, và một giá trị đã được gán cho nó (mặc dù thuộc tính của class không nhất thiết phải có giá trị ban đầu). Tuy nhiên chúng ta sẽ tìm hiểu về chúng ở các phần sau.
Để đọc thuộc tính này và xuất chúng ra trình duyệt, chúng ta sẽ phải tham chiếu chúng thông qua các object.
1 2 3 |
<?php echo $obj->prop1; ?> |
Nếu chúng ta không khai báo object, chương trình sẽ không thể xác định được thuộc tính đó thuộc object nào (vì hiểu 1 cách đơn giản object là đại diện cho class). Sử dụng dấu mũi tên (->) là một cấu trúc của Hướng Đối Tượng, để một object có thể truy cập được nội dung của thuộc tính và phương thức trong class.
1 2 3 4 5 6 7 |
<?php class MyClass { public $prop1 = "I'm a class property!"; } $obj = new MyClass; echo $obj->prop1; // Xuất thuộc tính ra trình duyệt ?> |
3. Định nghĩa Phương thức của Class
Phương thức là các hàm riêng biệt của class. Các action riêng lẻ, mà một object sẽ thực thi, thì được định nghĩa bên trong class như là các phương thức.
Ví dụ, để tạo ra các phương thức có khả năng thiết lập và trả về giá trị của thuộc tính $prop1, ta thêm đoạn mã như sau.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class MyClass { public $prop1 = "I'm a class property!"; public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } $obj = new MyClass; echo $obj->prop1; ?> |
Chú ý: Hướng Đối Tượng cho phép các object tự tham chiếu chính nó (tham chiếu bên trong class) bằng cách sử dụng biến $this. Khi làm việc bên trong 1 phương thức, sử dụng $this cũng giống như cách bạn sử dụng object name bên ngoài class.
Để sử dụng các phương thức này, việc gọi chúng cũng tương tự như sử dụng các hàm thông thường, nhưng chúng ta phải thông qua object để tham chiếu đến chúng. Echo thuộc tính từ MyClass, thay đổi giá trị của nó, và echo nó một lần nữa để xem sự thay đổi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php class MyClass { public $prop1 = "I'm a class property!"; public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } $obj = new MyClass; echo $obj->getProperty(); // echo giá trị của thuộc tính $obj->setProperty("I'm a new property value!"); // Thiết lập giá trị mới echo $obj->getProperty(); // echo nó lại 1 lần nữa để xem sự thay đổi ?> |
Sức mạnh của Hướng Đối Tượng càng bộc lộ rõ khi chúng ta sử dụng cùng một class cho nhiều trượng hợp.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php class MyClass { public $prop1 = "I'm a class property!"; public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Tạo hai objects $obj = new MyClass; $obj2 = new MyClass; // Echo giá trị của $prop1 từ hai object echo $obj->getProperty(); echo $obj2->getProperty(); // Thiết lập giá trị mới cho thuộc tính $prop1 của từng object $obj->setProperty("I'm a new property value!"); $obj2->setProperty("I belong to the second instance!"); // Echo lại giá trị của $prop1 từ hai object để xem sự thay đổi echo $obj->getProperty(); echo $obj2->getProperty(); ?> |
Như bạn có thể thấy, Hướng Đối Tượng giữ các object như các thực thể riêng biệt, nhờ đó làm cho việc tách mã lệnh thành các phần nhỏ khác nhau mà vẫn giữ được mối liên hệ nhất định giữa chúng một cách dễ dàng.
Leave a Reply