รดน้ำดำหัว


การห่อหุ้ม(Encapsulation)

คู่มือการเรียนรู้ PHP Object Oriented Programming (OOP)

บทเรียนดีๆ สำหรับผู้ที่ต้องการแบ่งปัน บทเรียนของคุณอาจมีค่าสำหรับอีกหลายๆ คน

beta version

การห่อหุ้ม(Encapsulation)

มานพ กองอุ่น php encapsulation 2097

Encapsulation เป็นการห่อหุ้มหรือกำหนดการเข้าถึงคุณสมบัติ(Property) และพฤติกรรม(Method) ของคลาส(Class) โดยมี keyword 3 คำคือ private, protected และ public ซึ่งขออธิบายแบบพอเข้าใจได้ดังนี้

Private เป็นการกำหนดให้สามารถใช้งานได้เฉพาะในคลาส (Class) เท่านั้น คลาส(Class) อื่นไม่สามารถเรียกใช้งานได้

Protected เป็นการกำหนดให้คลาส(Class) ตัวเองและคลาส(Class) ที่สืบทอดไปเท่านั้นให้สามารถเรียกใช้งานได้

Public เป็นการกำหนดให้คลาส(Class) ใดๆ สามารถเรียกใช้งานได้

ตัวอย่าง

<?php
class Mom
{
    private $_wallet = 5000;

    protected $family_wallet = 3000;

    public $other_wallet = 1000;

    private function getWallet()
    {
        return $this->_wallet;
    }

    protected function getFamilyWallet()
    {
        return $this->family_wallet;
    }

    public function getOtherWallet()
    {
        return $this->other_wallet;
    }

    public function getMyWallet()
    {
        return $this->_wallet;
    }
}

class Son extends Mom
{
    public function getWL()
    {
        return $this->getWallet();//ไม่สามารถเรียก privae method ได้
    }
    public function getFW(){
        return $this->getFamilyWallet();//สามารถเรียก protected method ได้
    }
}

class Other
{
    public function test()
    {
        $other = new Son();
        echo $other->getWallet();//ไม่สามารถเรียก private method ได้
    }
}

$mom = new Mom();
//echo $mom->getWallet();// Fatal error: Call to private method Mom::getWallet()
//echo $mom->getFamilyWallet();//Fatal error: Call to protected method Mom::getFamilyWallet()
echo $mom->getOtherWallet();//1000
echo $mom->getMyWallet();//5000

$son = new Son();
//echo $son->getWallet();// Fatal error: Call to private method Mom::getWallet()
echo $son->getFW();//3000
//echo $son->getWL(); //Fatal error: Call to private method Mom::getWallet()
echo $son->getOtherWallet();//1000
echo $son->getMyWallet();//5000

$other = new Other();
//$other->test();//Fatal error: Call to private method Mom::getWallet()

 


หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com
กลับขึ้นบน