PHP Access Modifiers

Access Modifiers เป็นการจัดการ หรือการควบคุมการเข้าถึง คุณสมบัติ (Properties) และ วิธีการ (Method) โดยแบ่งออกเป็น 3 รูปแบบดังนี้

  1. public สามารถเข้าถึงได้จากทุกที่ (ค่าเริ่มต้น)
  2. protected เข้าถึงได้จากภายในคลาส และคลาสที่ได้รับจากคลาสเท่านั้น
  3. private เข้าถึงได้ภายในคลาสเท่านั้น

 

1.public 

<?php

class Flower{

 public $name;
 
 function __construct($name){
  $this->name = $name;
 
  $this->getValue();
 }
 
 function getValue(){
 	return $this->name;
 }

}



$lotus = new Flower("ดอกบัว");

echo $lotus->name = "ดอกบัวใหญ่มาก";

?>

 

ไฟล์ที่ 1 public

จาไฟล์ที่ 1 เป็นการเข้าถึงคลาสจากภายนอก ซึ่งเป็นรูปแบบปกติของ public นั่นเอง โดยมีการกำหนดค่าคุณสมบัติจากภายนอกคลาสได้

 

จากไฟล์ที่ 1 เป็นการสร้างคลาสที่มีคุณสมบัติที่กำหนดการเข้าถึง (access modifiers) ไว้ทั้ง 3 รูปแบบ ซึ่งประกอบไปด้วย public,protected, และ private โดยทั้งหมดเป็นการเข้าถึงภายในคลาส ซึ่งสามารถเข้าถึงได้ตามคำอธิบายข้างต้น

 

2.Protected

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

  public function set_name($n) { 
    $this->name = $n;
    echo "ชื่อผลไม้ : ".$this->name."<br>";
  }
  protected function set_color() {
    $this->color = "สีเหลือง";
    echo $this->color;
  }
}

class SubFruit extends Fruit{
    function __construct(){
    	$this->color = "สี : แดง";
      	echo $this->color;
        echo $this->name = "<br>ชื่อผลไม้ : ฟักทอง";
    }
}

$mango = new Fruit();
$mango->set_name("มะม่วง");

$mango2 = new SubFruit();

?>

ไฟล์ที่ 2 protected

จากไฟล์ที่ 2 เน้นไปที่เรื่องของ protected ซึ่ง protected สามารถเข้าถึงได้จากภายในคลาส และจากคลาสที่ได้รับ ซึ่งคลาสที่ได้รับนั้นจะใช้คำสั่ง extends แล้วตามด้วยชื่อคลาสที่ให้มา ในบรรทัดที่ 16 เป็นตัวอย่างของคลาสที่ได้รับ ซึ่งจะสามารถใช้คุณสมบัติ และวิธีการ (Method) ของคลาสที่ให้มา ยกเว้นเพียงอะไรก็ตามที่เป็น private

 

3.Private

3.1 ตัวอย่างที่เกิด error

<?php
class Fruit {
    public $name;
    
    public function __construct($data){
    	$this->name = $data;
    }
    
    private function getData(){
    	return $this->name;
    }
    
    
}


$fruit = new Fruit("แตงกวา");
echo $fruit->getData();


?>

ไฟล์ที่ 3.1 private error

จากไฟล์ที่ 3 บรรทัดที่ 18 มีการเข้าถึงฟังก์ชัน getData() ที่ถูกกำหนดการเข้าถึงเป็น private จากภายนอกคลาส จึงทำให้เกิดข้อผิดพลาดนั่นเอง

 

3.2 ตัวอย่างที่ใช้งานได้

<?php
class Fruit {
    public $name;
    
    public function __construct($data){
    	$this->name = $data;
        echo $this->getData();
    }
    
    private function getData(){
    	return $this->name;
    }
    
    
}


$fruit = new Fruit("แตงกวา");


?>

ไฟล์ที่ 3.2 private success

จากไฟล์ที่ 3.2 บรรทัดที่ 7 มีการเข้าถึงฟังก์ชัน getData() ที่ถูกกำหนดการเข้าถึงเ็น private จากภายในคลาสจึงทำให้สามารถประมวลผลต่อไปได้

 

 

หากคุณพบคำที่สะกดผิด เว้นวรรคไม่ถูกต้อง ฯ โปรดแจ้งให้เราทราบ โดยลากคลุม (highlight) ข้อความนั้น แล้วกด Ctrl + Enter

ไม่สามารถคัดลอกเนื้อหานี้

Spelling error report

The following text will be sent to our editors: