Đối tượng, Thuộc tính và Phương thức trong thực tế
Trong thực tế, chúng ta có thể bắt gặp rất nhiều thứ được gọi là đối tượng (object). Xe ô tô là một ví dụ.
Một chiếc ô tô có các thuộc tính (property) như tên, khối lượng, màu sắc, ... và các phương thức (method) như khởi động, dừng lại, ...
Tất cả mọi chiếc ô tô đều có cùng thuộc tính, nhưng giá trị của thuộc tính khác nhau
Tất cả mọi chiếc ô tô đều có cùng phương thức, nhưng được thực hiện vào các thời điểm khác nhau.
Đối tượng trong PHP (hoặc nhiều ngôn ngữ lập trình khác) có sự tương quan với đối tượng trong thực tế mà các bạn sẽ tìm hiểu trong phần còn lại của bài viết.
LỚP TRONG PHP
Một lớp (class) đơn giản được định nghĩa như sau:
class car { // khau báo hằng số const OWNER = 'MrKen'; // khai báo thuộc tính public $color = 'white'; // khai báo phương thức public function showColor() { echo $this->color; } }
Trong đó, OWNER là một hằng số, $color là một thuộc tính của đối tượng car và có giá trị là 'white', showColor() là một phương thức của đối tượng car, có chức năng hiển thị thuộc tính $color
Biến $this là biến tham chiếu đến đối tượng, có sẵn khi một phương thức hoặc một thuộc tính được gọi từ trong đối tượng.
Từ khóa new
Để gọi một đối tượng, cần phải sử dụng từ khóa new. Một đối tượng mới sẽ được tạo ra.
Ví dụ
$myObj = new myClass(); // Cũng có thể gọi từ biến $myClassName = 'myClass'; $myObj = new $myClassName(); // new myClass()
Truy cập thuộc tính và gọi phương thức của đối tượng
class Foo { public $bar = 'property'; public function bar() { return 'method'; } } $obj = new Foo(); echo $obj->bar, PHP_EOL, $obj->bar();
Kết quả
property method
Hàm khởi tạo Lớp
Hàm khởi tạo lớp là hàm sẽ thực thi mỗi khi đối tượng mới được tạo ra.
class Foo { public $bar = 'HanhPhucAo'; function __construct() { $this->bar = 'MrKen'; } public function bar() { return $this->bar; } } $foo = new Foo(); echo $foo->bar;
Kết quả
MrKen
Mở rộng Lớp
class User { public $name = 'MrKen'; public $rights = 9; public function rights() { if ($this->rights == 9) { return 'Quản trị viên'; } else { return 'Thành viên'; } } } class Info extends User { function getInfo() { return $this->name , ' là ' , $this->rights(); } } $user = new Info; echo $user->getInfo();
Trong ví dụ trên, class Info là class kế thừa của class User. Do đó từ class Info chúng ta có thể truy cập các thuộc tính và gọi các hàm từ class User.
Từ khóa public, protected và private
Khi khai báo hằng, thuộc tính hoặc phương thức (các thành viên) trong lớp, chúng ta phải dùng một trong các từ khóa trên để định nghĩa phạm vi sử dụng cho chúng.
- public: định nghĩa thành viên đó có thể sử dụng ở bất cứ đâu
- protected: định nghĩa thành viên đó có thể sử dụng trong lớp và các lớp kế thừa
- private: định nghĩa thành viên đó chỉ có thể sử dụng trong lớp
<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // Hoạt động echo $obj->protected; // Lỗi echo $obj->private; // Lỗi $obj->printHello(); // Hiển thị Public, Protected và Private /** * Define MyClass2 */ class MyClass2 extends MyClass { // Có thể khai báo lại thuộc tính public và protected, nhưng không thể với private public $public = 'Public2'; protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj2->public; // Hoạt động echo $obj2->protected; // Lỗi echo $obj2->private; // Undefined $obj2->printHello(); // Hiển thị Public2, Protected2, Undefined
![[OFF]](/assets/images/off.gif)
![[IMAGE]](http://i.imgur.com/IoV9Tcjh.png)