Hướng dẫn access modifier trong php

Trong bài này, chúng ta sẽ tìm hiểu về cách sử dụng access modifier trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

Những thuộc tính (properties) và phương thức (methods) của lớp (class) có thể có access modifiers để xác định phạm vi mà chúng được truy cập. Có 3 access modifiers trong PHP là public, protected, private.

– Những thuộc tính và phương thức có chỉ định truy cập là public thì sẽ được truy cập ở bất cứ đâu trong chương trình. Chỉ định truy cập public là mặc định.

– Những thuộc tính và phương thức có chỉ định truy cập là protected thì chỉ được truy cập bên trong lớp (class) chứa nó và lớp dẫn xuất (derived class) của lớp đó.

– Những thuộc tính và phương thức có chỉ định truy cập là private thì chỉ được truy cập bên trong lớp (class) chứa nó.

1. Ví dụ các thuộc tính public, protected, private trong class

<?php
class Cat {
    public $name;
    protected $color;
    private $weight;
}
$tom = new Cat();
$tom->name = 'Tom'; // OK
$tom->color = 'grey and white'; // ERROR
$tom->weight = '3.5'; // ERROR
?>

2. Ví dụ các phương thức public, protected, private trong class

<?php
class Cat {
    public $name;
    public $color;
    public $weight;
    // a public function (default)
    function set_name($name) {
        $this->name = $name;
    }
    // a protected function
    protected function set_color($color) {
        $this->color = $color;
    }
     // a private function
    private function set_weight($weight) {
        $this->weight = $weight;
    }
}
$tom = new Cat();
$tom->set_name('Tome'); // OK
$tom->set_color('grey and white'); // ERROR
$tom->set_weight('3.5'); // ERROR
?>

3. Ví dụ thuộc tính protected trong lớp dẫn xuất

<?php
class Cat {
    public $name;
    public $color;
    protected $weight;
    public function __construct($name, $color, $weight) {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
}
class Kitty extends Cat {
    public function message() {
        echo "Hello, my name is " . $this->name . ", has " . $this->color . " color";
        // using protected $weight in derived class
        echo "<br> And my weight is " . $this->weight . " kilograms";
    }
  }
$kitty = new Kitty("Kitty", "pink and white", "3.5");
$kitty->message();
?>

Trong ví dụ trên, thuộc tính $weight có chỉ định truy cập là protected và có thể sử dụng trong lớp dẫn xuất. Tương tự, các phương thức có chỉ định truy cập là protected cũng có thể sử dụng trong lớp dẫn xuất.

  • Trường hợp Deadlock khi lập trình multithreading trong Java
  • Đếm độ dài của chuỗi (string) với hàm strlen() trong PHP
  • Xử lý html form với PHP
  • Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết
  • Thay thế chuỗi hoặc mảng với hàm str_replace() trong PHP

PHP programming web programming

Hướng dẫn access modifier trong php

Đã đăng vào thg 11 20, 2020 2:38 SA 1 phút đọc

1) Khái quát nội dung

Access ModifiersClassSub ClassWorld
Public Yes Yes Yes
Protected Yes Yes No
Private Yes No No
  • public- thuộc tính hoặc phương thức có thể được truy cập từ mọi nơi. Đây là mặc định

  • protected - thuộc tính hoặc phương thức có thể được truy cập trong lớp và bởi các lớp dẫn xuất từ lớp đó

  • private - thuộc tính hoặc phương thức chỉ có thể được truy cập trong lớp

2) Ví dụ cụ thể

  • Public:
    <?php  
		class Fruit {
			public $name;
			public $color;

			function setName($name) {
				$this->name = $name;
			}

			function setColor($color) {
				$this->color = $color;
			}

			function getName() {
				return $this->name;
			}

			function getColor() {
				return $this->color;
			}
		}

		class A extends Fruit {
			function call() {
				return $this->name;
			}
		}

		$fruit = new Fruit();
		$fruit->setName('a');
		echo $fruit->name; // OK
        echo $fruit->getName(); // OK 
        $a = new A();
        $a->setName('demo');
        echo $a->call(); // OK
	?>

Quyền truy cập là public, chúng ta có thể gọi ở bất kỳ vị trí nào:

  • Bên ngoài gọi được bên trong Class mà không bị lỗi: echo $fruit->name;
  • Tương tự Class con có thể gọi được và bên trong Class

  • Protected:
    <?php  
		class Fruit {
			protected $name;
			public $color;

			function setName($name) {
				$this->name = $name;
			}

			function setColor($color) {
				$this->color = $color;
			}

			function getName() {
				return $this->name;
			}

			function getColor() {
				return $this->color;
			}
		}

		class A extends Fruit {
			function call() {
				return $this->name;
			}
		}

		$fruit = new Fruit();
		$fruit->setName('a');
		echo $fruit->name; // Error
        echo $fruit->getName(); // OK
        $a = new A();
        $a->setName('demo');
        echo $a->call(); // OK
	?>

Khi quyền truy cập là protected:

  • Trong Class và Class con, ta có thể gọi và sử dụng
  • Ở ngoài Class, khi gọi đến và hiển thị ra màn hình. Sẽ báo lỗi do quyền truy cập thiết lập không đúng.

  • Private:
    <?php  
		class Fruit {
			private $name;
			public $color;

			function setName($name) {
				$this->name = $name;
			}

			function setColor($color) {
				$this->color = $color;
			}

			function getName() {
				return $this->name;
			}

			function getColor() {
				return $this->color;
			}
		}

		class A extends Fruit {
			function call() {
				return $this->name;
			}
		}

		$fruit = new Fruit();
		$fruit->setName('a');
		echo $fruit->name; // Error
        echo $fruit->getName(); // OK
        $a = new A();
        $a->setName('demo');
        echo $a->call(); // Error
	?>

Quyền truy cập private:

  • Class con và gọi từ bên ngoài sẽ báo lỗi do quyền truy cập không khả thi
  • Từ trong Class, ta vẫn gọi được bình thường. Quyền truy cập là nội bộ, ở trong hàm có thể gọi được

3) Tài liệu liên hệ

https://www.w3schools.com/php/php_oop_access_modifiers.asp

All rights reserved

Tải thêm tài liệu liên quan đến bài viết Hướng dẫn access modifier trong php