Web Cơ Bản

Cách khai báo lớp (class), đối tượng (object) trong PHP

Lớp (class), đối tượng (object) là gì ?

- Trong lập trình hướng đối tượng, một lớp là một cái khuôn mẫu cho các đối tượng, trong khi đó một đối tượng chính là một thể hiện của lớp.

- Ví dụ như chúng ta có một lớp tên là Fruit (trái cây). Một trái cây thường có các thuộc tính như tên loại trái cây, màu sắc, trọng lượng, . . . . Chúng ta có thể định nghĩa các biến như $name, $color, $weight để lưu giữ giá trị của các thuộc tính này.

- Khi các đối tượng riêng lẻ (banana, orange, apple) được tạo, chúng sẽ kế thừa các thuộc tính và hành vi từ lớp, nhưng mỗi đối tượng sẽ có các giá trị khác nhau cho các thuộc tính.

Cách khai báo một lớp (class) trong PHP

- Trong PHP, để khai báo một lớp thì chúng ta sử dụng từ khóa class, theo sau là tên lớp và cặp dấu ngoặc nhọn, các thuộc tính & phương thức của lớp sẽ được liệt kê bên trong cặp dấu ngoặc nhọn này.

- Dưới đây là cú pháp dùng để khai báo một lớp.

class tên_lớp{
	//các thuộc tính & phương thức được khai báo tại đây
}

- Đoạn mã bên dưới dùng để khai báo một lớp có tên là Fruit, lớp này có hai thuộc tính ($name, $color), hai phương thức là set_name() và get_name(). Trong đó, phương thức set_name() dùng để thiết lập giá trị cho thuộc tính $name, còn phương thức get_name() thì dùng để lấy giá trị của thuộc tính $name.

<?php
	class Fruit {
		// Các thuộc tính (property)
		public $name;
		public $color;
		// Các phương thức (method)
		function set_name($name) {
			$this->name = $name;
		}
		function get_name() {
			return $this->name;
		}
	}
?>

- Trong một lớp, các biến được gọi là “thuộc tính”, các hàm thì được gọi là “phương thức”.

Cách khai báo một đối tượng (object) trong PHP

- Các lớp sẽ không mang lại giá trị gì nếu không có đối tượng. Chúng ta có thể tạo nhiều đối tượng từ một lớp, mỗi đối tượng sẽ kế thừa tất cả các thuộc tính & phương thức được định nghĩa bên trong lớp, nhưng giá trị thuộc tính của các đối tượng có thể khác nhau.

- Để tạo một đối tượng từ một lớp thì ta sử dụng từ khóa new.

- Trong đoạn mã bên dưới, $apple và $banana là các đối tượng của lớp Fruit.

<?php

	class Fruit {
		public $name;
		public $color;
		function set_name($name) {
			$this->name = $name;
		}
		function get_name() {
			return $this->name;
		}
	}

	$apple = new Fruit();
	$apple->set_name('Apple');

	$banana = new Fruit();
	$banana->set_name('Banana');

	echo $apple->get_name();
	echo "<br>";
	echo $banana->get_name();

?>

- Tôi thêm hai phương thức set_color() và get_color() để thiết lập và nhận giá trị thuộc tính $color.

<?php

	class Fruit {
		public $name;
		public $color;
		function set_name($name) {
			$this->name = $name;
		}
		function get_name() {
			return $this->name;
		}
		function set_color($color) {
			$this->color = $color;
		}
		function get_color() {
			return $this->color;
		}
	}

	$banana = new Fruit();
	$banana->set_name('Banana');
	$banana->set_color('Yellow');

	echo $banana->get_name();
	echo "<br>";
	echo $banana->get_color();

?>

Chức năng của từ khóa $this

- Từ khóa $this dùng để ám chỉ đối tượng hiện tại, nó chỉ có thể được sử dụng bên trong các phương thức.

- Cùng nhìn xem đoạn mã bên dưới:

<?php
	class Fruit {
		public $name;
	}
	$banana = new Fruit();
?>

- Chúng ta có hai cách thay đổi giá trị của thuộc tính $name.

- Cách 1: Bên trong lớp (bằng cách thêm phương thức set_name() và sử dụng $this)

<?php
	class Fruit {
		public $name;
		function set_name($name) {
			$this->name = $name;
		}
	}
	$banana = new Fruit();
	$banana->set_name("Banana");
?>

- Cách 2: Bên ngoài lớp (bằng cách thay đổi trực tiếp giá trị của thuộc tính)

<?php
	class Fruit {
		public $name;
	}
	$banana = new Fruit();
	$banana->name = "Banana";
?>

Chức năng của từ khóa instanceof

- Chúng ta có thể sử dụng từ khóa instanceof để kiểm tra một đối tượng có thuộc một lớp cụ thể hay không, nó sẽ trả về giá trị TRUE nếu phải, còn ngược lại thì trả về giá trị FALSE.

<?php
	class Fruit {
		public $name;
		function set_name($name) {
			$this->name = $name;
		}
	}
	$banana = new Fruit();
	var_dump($banana instanceof Fruit);
?>