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

การประยุกต์เบื้องต้น

การเรียนรู้โปรแกรมแบบ OOP เริ่มต้นจากการสร้างและทำงาน class ในฐานะอ๊อบเจคที่ประกอบด้วยคุณสมบัติ (หรือคุณลักษณะ) และปฏิบัติการ (หรือเมธอด)

Class

การประกาศ class ใช้คีย์เวิร์ด class รายละเอียดของ class ได้รับการหุ้มในวงเล็กปีกกา ({ })

<?php

class myclass
{

// รายละเอียด รวมถึง คุณสมบัติ และเมธอด เป็นต้น

}

?>

class นี้ให้ชื่อว่า myclass

class สร้างคุณลักษณะเป็นการประกาศตัวแปรภายในข้อกำหนด class ด้วยคีย์เวิร์ด var และการสร้างปฏิบัติการใช้การประกาศฟังก์ชัน

ตัวอย่างการสร้าง Employee class ที่ประกอบ 4 คุณลักษณะ ใน PHP สามารถสร้างค่าเริ่มต้นได้

<?php

class Employee
{

public $id;
public $firstname = “unknown”;
public $lastname;
public $sex = 1;

}

?>

Instance

การสร้างอ๊อบเจคที่ใช้ทำงานด้วยที่เรียกว่า instance ของอ๊อบเจค การสร้างใช้คีย์เวิร์ด new ต้องมีการระบุ class ที่อ๊อบเจคจะเป็น instance

<?php

$emp = new Employee();

?>

คุณลักษณะ

การเข้าถึงตัวแปรสมาชิกใช้ ชื่อ instance กับ -> operator ตามด้วยชื่อตัวแปรสมาชิก

<?php

$emp_name = $prod->firstname;

?>

ภายใน class การเข้าถึงตัวแปรสมาชิกใช้ -> operator และเข้าถึงด้วยพอยเตอร์พิเศษเรียกว่า $this

<?php

class Employee
{

public firstname;

// คำสั่งอื่น
$new_name = $this->firstname;

}
?>

การตั้งค่าให้กับตัวแปรสมาชิก

<?php

$emp->firstname = " อัศวิน ";

?>

เมธอด

ชื่อฟังก์ชันที่เป็นเมธอดต้องไม่ซ้ำกัน ตัวอย่างการสร้างเมธอดดูได้ฟังก์ชัน get_firstname() สำหรับการอ่านชื่อพนักงานและฟังก์ชัน set_firstname สำหรับการตั้งชื่อพนักงาน

การเรียกเมธอดของ class เหมือนกับการเรียกคุณลักษณะของ class ถ้าเมธอดต้องการพารามิเตอร์ให้วางไว้ในวงเล็บ และระบุชื่อเจ้าของอ๊อบเจค

<?php

$new_emp = new Employee();
$first_name = $new_emp->get_firstname();
$new_emp-> set_firstname($new_name);

?>

การเริ่มต้นและทำความสะอาดอ๊อบเจค

เมื่อเริ่มต้นอ๊อบเจค Employee จากการสร้าง instance ของ Employee class สิ่งที่ลำบากคือการเริ่มค่า ตามตัวอย่างนี้

< ?php

$emp = new Employee();
$emp->id = "A321500"
$emp->name = " สุพจน์ ";
// และอื่นๆ ...

?>

การแก้ไขปัญหานี้ทำได้ด้วยแนวคิด constructor

Constructor

constructor เป็นวิธีการประมวลผลเมื่อ instance ใหม่ได้รับการสร้างขึ้น โดย constructor รับพารามิเตอร์ที่ส่งผ่าน new operator ด้วยการวางไว้ในวงเล็บหลังชื่อ class

<?php

class Employee
{

// ตัวแปรสมาชิก

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

$this->id = $m_empid;
$this->firstname = $m_empfname;
$this->lastname = $m_emplname;
$this->salary = $m_salary;
$this->sex = $m_sex;

}

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

}
?>

การประกาศ constructor ให้กำหนดเป็น __construct ( เส้นใต้หรือ underscore 2 ตัวติดกัน) ถึงแม้ว่าสามารถเรียก constructor ได้เอง แต่วัตถุประสงค์หลักคือ การเรียกอย่างอัตโนมัติ เมื่ออ๊อบเจคได้รับการสร้างคำสั่งต่อไปประกาศ class ด้วย constructor

Destructor

เมธอด destructor ใช้ลบอ๊อบเจค การกำหนดใน PHP ผ่านฟังกชัน __destruct ถ้าไม่ได้กำหนดไว้ PHP จะดำเนินการทำความสะอาดและทำงานต่อ

<?php

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

public function __destruct()
{

// วางคำสั่งทำความสะอาด

}

?>

Visibility

PHP ได้วิธีการควบคุมการดูหรือปรับปรุงข้อมูลกับตัวแปรสมาชิก รวมถึงการเรียกฟังก์ชันสมาชิก ทำให้กำหนดวิธีการดูข้อมูล การเก็บหรือแก้ไขข้อมูลได้ visibility มี 3 modifier คือ

  • public ทุกคนสามารถอ่านและปรับปรุงตัวแปรสมาชิกนี้ หรือเรียกเมธอดนี้ รวมทั้งสามารถใช้ได้โดยคำสั่งภายนอก คำสั่งภายใน class หรือ class ที่ขยายการทำงานกับ class ที่ระบุ
  • private เฉพาะคำสั่งภายใน class นี้สามารถอ่านหรือปรับปรุงตัวแปรสมาชิก private หรือเรียกฟังก์ชันสมาชิก private ส่วนคำสั่ง, class และ class ที่ขยายการทำงานกับ class นี้ไม่สามารถใช้รายการ private นี้ได้
  • protected คำสั่งภายนอกและ class อื่นที่ไม่มีความสัมพันธ์กับ class ที่กำหนดไม่สามารถอ่านและเขียนตัวแปรสมาชิก protected ได้ หรือเรียกฟังก์ชันสมาชิก protected แต่ class ที่ขยายการทำงานกับ class นี้ได้รับอนุญาตให้เข้าถึงหรือเรียกได้

ถ้าไม่ต้องการบุคคลอื่นแก้ไขข้อมูลให้เปลี่ยน visibility จาก public เป็น private หรือ protected แต่ให้คำสั่งภายนอกสามารถดูได้

<?php

class Employee
{

protected $id;
protected $firstname;
protected $lastname;
protected $sex;
protected $salary;

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

$this->id = $m_empid;
$this->firstname = $m_empfname;
$this->lastname = $m_emplname;
$this->salary = $m_salary;
$this->sex = $m_sex;

}

public function __destruct()
{

// clean up

}

public function get_EmployeeID()
{

return $this->id;

}

public function get_EmployeeFullName()
{

return $this->firstname." ".$this->lastname;

}

//
// ฟังก์ชันอื่นๆ
//

public function get_EmployeeSex()
{

if ($this->sex == 1)
    return "Male";
else if ($this->sex == 2)
    return "Female";
else
    return "Unknow";

}

}

?>

ค่าคงที่และข้อมูลสถิตย์

ในบางกรณีอาจจะมีการกำหนดและใช้ค่าคงที่กับอ๊อบเจค ดังนั้นเรียนรู้วิธีการติดต่อกับค่าคงที่ ตัวแปรสถิตย์ (static variable) และเมธอดสถิตย์ (static method)

ค่าคงที่ของ Class

การกำหนดค่าคงที่ของ class

<?php

class Employee
{

const THAI = 1;
const FOREIGN = 2;

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

}

?>

ค่าคงที่ไม่มีความสัมพันธ์กับอ๊อบเจค จึงไม่สามารถใช้ -> operator ได้ การเข้าถึงขึ้นกับแหล่งของค่าคงที่

•  ภายนอก class การเข้าถึงค่าจากภายนอก class ให้ระบุเริ่มต้นชื่อ class ตามด้วย scope resolution operator ที่เป็น colon คู่ (::) และชื่อค่าคงที่

<?php

$emp = new Employee("321500", " สุพจน์" , " แสงไพบูลย์" , 1, 15000, Employee::THAI);

?>

•  ภายใน class การเข้าถึงจากภายใน class ใช้คีย์เวิร์ด self เพื่อบอกให้ PHP มองหาใน class ปัจจุบันตามด้วย scope resolution operator และชื่อค่าคงที่

<?php

class Employee
{

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

public function get_EmployeeNation()
{

if ($this->nation == self::THAI)
    return " ไทย" ;
else if ($this->nation == self::FOREIGN)
    return " ต่างชาติ" ;
else
    return "Unknow";

}

}

?>

ตัวแปรสมาชิกสถิตย์

ความต้องการข้อมูลบางอย่างสัมพันธ์กับทั้ง class ของอ๊อบเจค แต่ข้อมูลนี้ไม่ตายตัว ตัวแปรสมาชิกแบบนี้สามารถสร้างให้เป็น global กับทั้ง class แต่ไม่ใช่ instance ตัวแปรสมาชิกแบบนี้ PHP เรียกว่าตัวแปรสมาชิกสถิตย์ ( Static member variable) ประกาศด้วยคีย์เวิร์ด static

การเข้าถึงตัวแปรสมาชิกสถิตย์เหมือนกับการเข้าถึงค่าคงที่จากภายใน class คือ ใช้คีย์เวิร์ด self ตามด้วย ด้วย scope resolution operator และชื่อตัวแปรสมาชิก

<?php

class Employee
{

private static $num_instance = 0;

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

$this->id = $m_empid;
$this->firstname = $m_empfname;
$this->lastname = $m_emplname;
$this->salary = $m_salary;
$this->sex = $m_sex;
$this->nation = $m_nation;

self:: $num_instance++;
echo " การสร้าง instance จำนวน ".self:: $num_instance."<br/>\n";

}

}

?>

ตัวแปรสมาชิกสถิตย์สามารถกำหนดระดับ scope นอกจาก public และไม่ใช่อ่านอย่างเดียว

ตัวแปรสมาชิกแบบนี้จะตั้งค่าใหม่ที่สคริปต์ประมวลผลใหม่ ในกรณีการนับตามตัวอย่างถ้าเป็นการเรียกคนละครั้งจะเป็น 1 แต่การป้อนต่อเนื่องโดยไม่ได้ออกจากสคริปต์จึงจะนับต่อเนื่องได้

เมธอดสถิตย์

ความต้องการปฏิบัติการกับระเภทงานที่ไม่จำเป็นต้องเจาะจง instance แต่ปฏิบัติงานตามประเภทงาน ตัวอย่าง ต้องการสร้างเมธอดบน Employee class ที่สร้างอ๊อบเจค Employee จำนวนหนึ่ง

การประกาศเมธอดใช้คีย์เวิร์ด static

<?php

class Employee
{

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

public static function search_employee($search_value)
{

// คำสั่งค้นหา... กำหนดตาม $search_value

}

}

?>


  

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