Web Cơ Bản

Cách thiết lập phạm vi truy cập các thuộc tính, phương thức của lớp trong PHP

- Trong quá trình khai báo một lớp, chúng ta cần phải xác định rõ “phạm vi” có thể truy cập vào các thuộc tính & các phương thức của lớp.

- Dưới đây là ba từ khóa dùng để xác định phạm vi truy cập vào các thuộc tính & phương thức của lớp.

  • public (mặc định) - Thuộc tính & phương thức có thể được truy cập ở bất cứ đâu.
  • protected - Thuộc tính & phương thức chỉ có thể được truy cập bên trong lớp, hoặc bên trong các lớp được kế thừa từ lớp này.
  • private - Thuộc tính & phương thức chỉ có thể được truy cập bên trong lớp.

- Trong lớp Laptop bên dưới, ba thuộc tính $model, $color, $price có phạm vi truy cập khác nhau. Trong đó, thuộc tính $model có thể được truy cập ở bất cứ đâu (bởi vì nó là public), còn thuộc tính $color & $price thì không thể truy cập ở bên ngoài lớp, nếu các bạn cố truy cập chúng ở bên ngoài lớp thì sẽ xảy ra lỗi.

<?php
	class Laptop{
		public $model;
		protected $color;
		private $price;
	}
	$asus = new Laptop();
	$asus->model = "ASUS FX503"; //OK
	$asus->color = "Gray"; //ERROR
	$asus->price = "25.000.000"; //ERROR
?>

- Một ví dụ khác.

- Phương thức set_name() không được xác định phạm vi, cho nên mặc định là public, nó có thể được truy cập ở bất cứ đâu.

- Phương thức set_color() được thiết lập protected, cho nên nó chỉ có thể được truy cập bên trong lớp Laptop, hoặc bên trong những lớp kế thừa từ lớp Laptop.

- Phương thức set_price() được thiết lập private, cho nên nó chỉ có thể được truy cập bên trong lớp Laptop.

<?php
	class Laptop{
		public $model;
		public $color;
		public $price;
		function set_model($input_model){ //phương thức không xác định phạm vi, mặc định là “public”
			$this->model = $input_model;
		}
		protected function set_color($input_color){
			$this->color = $input_color;
		}
		private function set_price($input_price){
			$this->price = $input_price;
		}
	}
	$asus = new Laptop();
	$asus->set_model("ASUS FX503"); //OK
	$asus->set_color("Gray"); //ERROR
	$asus->set_price("25.000.000"); //ERROR
?>