PHP: PHP Hypertext Preprocessor

Home

PHP Tutorial
Knowledge Developer Database Internet Resource
OOP
1. แนวคิด Object Oriented Programming
2. การประยุกต์เบื้องต้น
3. การขยายอ๊อบเจค
 
PHP เบื้องต้น
1. เริ่มต้นด้วย PHP
2. ภาษา PHP
3. การทำงานไฟล์ และไดเรคทอรี
4. การทำงานกับ Array
5. การควบคุมข้อความ และนิพจน์ปกติี่
6. คำสั่งใช้ใหม่และฟังก์ชัน
7. Object Oriented Programming
 
PHP
PHP เบื้องต้น
การสร้างโปรแกรมประยุกต์เว็บ
PHP ระดับสูง
 
Internet
PHP
SSI
HTML
AJAX
 
PHP เบื้องต้น > Object Oriented Programming

การขยายอ๊อบเจค

Object oriented programming มีความสามารถในการห่อหุ้มข้อมูลเป็นประเภทข้อมูลใหม่ เมื่อมีการสร้าง Employee class ขึ้นมา ที่อินเฮอริตคุณสมบัติของพนักงานขึ้นมาได้

อินเฮอริต

ในทางปฏิบัติ ข้อมูลหลายประเภทอาจจะมีจำกัดขอบเขตผู้เข้าถึง เช่น ระบบจ่ายเงินเดือน ระบบโบนัส สิ่งเหล่านี้ไม่จำเป็นต้องเข้าสู่ระบบรวม แต่สามารถแบ่งส่วนออกมาได้

ถ้า class เป็น subclass ของอีก class สามารถใช้คีย์เวิร์ด extend เพื่อระบุการขยาย คำสั่งต่อไปนี้สร้าง Bonus class ที่อินเฮอริตจาก Employee class

<?php

class Bonus Extends Employee
{

protected static $bonus_rate = 1;

}

?>

การอินเฮอริตทำงานเพียง 1 ทิศทาง subclass หรือลูกอินเฮอริตส่วนการทำงานจากแม่หรือ class ฐาน แต่แม่ไม่สามารถใช้ส่วนการทำงานของลูก

Overriding

การให้ class ลูกสามารถปรับปรุงข้อมูลจากการ class ฐานหรือแม่ ตัวอย่าง Bonus class สามารถเพิ่มอัตราโบนัสเป็นพารามิเตอร์ PHP ยอมให้ทำได้และใช้ constructor จาก class ฐานด้วยการใช้คีย์เวิร์ด parent โดยรวมกับ scope resolution operator เพื่อเรียกเมธอดจาก class ฐาน วิธีนี้เรียกว่า Overriding เมธอดจาก class ฐาน ได้รับการแทนที่โดยเมธอดใหม่ของ class

<?php

class Bonus Extends Employee
{

protected $bonus_rate = 0.5;

public function __construct($m_empid, $m_empfname, $m_emplname, $m_sex, $m_salary, $m_nation, $m_bonus)
{

parent::__construct($m_empid, $m_empfname,
$m_emplname, $m_sex, $m_salary, $m_nation);
$this->bonus_rate = $m_bonus;

}

}

?>

เมธอด destructor ควรได้รับ overriding

<?php

public function __destruct()
{

// ควรเรียก destructor จากแม่
parent::__destruct();

}

?>

เมื่อ Bonus class ทำงานได้แล้ว ควรมีการปรับปรุงเมธอด get_EmployeePayroll() ใหม่ด้วยการ overriding จาก class ฐาน

<?php

public function get_EmployeePayroll()
{

return parent::get_EmployeeSalary()*(1+ $this->bonus_rate);

}

?>

การทำให้ Class ทำงานเหมือนกัน

หลักการสำคัญของ Object oriented programming ประการหนึ่งคือ ทำให้อินเตอร์เฟซเหมือนกันหรือ polymorphism ดังนั้นจึงต้องทำให้คำสั่งได้รับการเปลี่ยนแปลงนอกเหนือการควบคุม

โครงสร้างตามลำดับชั้นของ Class

โครงสร้างตามลำดับของสามารถขยายตามแนวดิ่งได้ด้วยอินเฮอริตได้ และสามารถปรับปรุงเมธอดจาก class ฐานด้วยการ overriding ได้สำหรับความเหมาะสมในการทำงาน ดังนั้นเมธอดบน class ฐานควรทำหน้าที่เป็นต้นแบบ (template) การกำหนดนี้ทำได้ด้วยการใช้คีย์เวิร์ด abstract

<?php

abstract class Employee
{

// คำสั่งอื่น...

}

?>

การป้องกันอินเฮอริตและ Overriding

บางเมธอดหรือ class อาจจะเกิดจากโครงสร้างตามลำดับชั้นของอ๊อบเจค ตัวอย่าง ป้องกันไม่ให้บุคคลทั่วไป overriding เมธอด get_EmployeeID ใน Employee class

การป้องกันใช้ คีย์เวิร์ด final

<?php

abstract class Employee
{

// คำสั่งอื่น...

final public function get_EmployeeID()
{

return $this->id;

}

}

?>


  

สงวนลิขสิทธิ์ (C) widebase / Julaphak