20.59 น. - เผยอุบัติเหตุช่วงสงกรานต์สูญเสีย 3 พันล้าน - ไทยรัฐ       ||      20.38 น. - สืบพยานปากสุดท้ายในคดี เจ ไอ - สำนักข่าวไทย       ||      20.20 น. - แถลงการณ์สำนักพระราชวังเรื่อง หม่อมศรีรัศมิ์ เจ็บครรภ์ - สำนักข่าวไทย       ||      19.40 น. - ส.ส.ทรท.จี้ชาติไทยขับ กรณีวุฒิปลอม - ไทยรัฐ       ||      19.20 น. - อภิสิทธิ์ชี้ต้องมีคนผิดกรณีส.ส.กดบัตรแทนกัน - ไทยรัฐ       ||      18.59 น. - “โสภณ” โวย 2 พิธีกร "สมัคร-ดุสิต" ดึงเรื่องทุจริตหนองงูเห่าเป็นผลงานคนกลุ่มวังน้ำยม - เดลินิวส์       ||      18.42 น. - ไทยเตรียมฟ้องสหรัฐฯหากไม่มีสินบนอินวิชั่น - ไทยรัฐ       ||      18.25 น. - ปตท.ปรับลดราคาน้ำมันเบนซิน 30 สต.พรุ่งนี้ - ไทยรัฐ       ||      17:35 น. - หุ้นไทยยังอยู่ในแดนลบต่อเนื่อง ดัชนี-0.36จุด - ไทยรัฐ       ||      17:02 น. - ตำรวจรวบ 2 พี่น้องฆ่าโสเภณีควักตับทอดกิน
แก้ปัญหาคอมพิวเตอร์
 ซ่อมคอม   บทความ คอมพิวเตอร์
 แผนผังกระบวนการแก้ปัญหาคอมพิวเตอร์   การแก้ปัญหาคอมพิวเตอร์
 กลุ่มอาการเสียของคอมพิวเตอร์   อาการเสียของคอมพิวเตอร์
 เรียนลัดคำสั่ง Dos ที่จำเป็น   คำสั่ง Dos เบื้องต้น
 แก้ไขปัญหาในเรื่องทั่วไปบนวินโดวส์  การแก้ไขปัญหาทั่วไป
 แก้ไขปัญหาหนังไม่มีภาพ เพลงไม่มีเสียง  แก้ไขปัญหาดูหนังฟัง เพลงไม่ได้
 แก้ไขปัญหาอุปกรณ์ทำงานผิดพลาด  แก้ปัญหาอุปกรณ์ทำงานผิดพลาด
 ไขปัญหาจุกจิกในการแสดงผล  แก้ปัญหาจุกจิกในการแสดงผล
 การวิเคราะห์และแก้ไขปัญหาเมนบอร์ด  การแก้ไขปัญหาเมนบอร์ด
 วิเคราะห์อาการเสียจากไบออส Award  วิธีแก้อาการเสียจากไบออส Award
 วิเคราะห์อาการเสียจากไบออส AMI  วิธีแก้อาการเสียจากไบออส AMI
 วิเคราะห์อาการเสียจากไบออส Phoenix  วิธีแก้อาการเสียจากไบออส Phoenix
 วิเคราะห์อาการเสียจากการ Post  วิธีแก้อาการเสียจากการ Post
 การแก้ปัญหาครื่องแฮงค์   การแก้ปัญหาครื่องแฮงค์
 การสร้างแผ่น Startup Disk Win 98&ME  การสร้างแผ่น Startup Disk Win 98&ME  การติดตั้ง Font ใหม่ ๆ  ให้ Windows  วิธีติดตั้ง Font ใหม่ ๆ ให้ Windows
 การเข้า Safe Mode แก้ปัญหาซอฟต์แวร์  การเข้า Safe Mode
   อาการเสียของคอมพิวเตอร์
 เทคนิคเจาะระบบ และการปรับแต่ง Windows   เทคนิคเจาะระบบ windows



ตั้งเวปนี้ไว้หน้าแรก
ตั้งเวปนี้ไว้เป็นหน้าแรก

แนะนำติชม

> > z E rO ` S i t e < <
รวมภาพน่ารัก ฟรี sticker vote รวม gallery wallpaper วัยรุ่นน่ารักๆ


Home บทเรียน PHP บทเรียน HTML บทเรียน Perl Java Script บทเรียน Asp
หน้าแรก ช่อง3 ช่อง5 ช่อง7 ช่อง9 ช่อง11 ช่อง ITV ช่อง UBC ส่ง  SMS DTAC Download DirecX
User Online 84 ท่าน     ติดต่อโฆษณา โทร 04-1700841 iqjung@hotmail.com       
 
การสร้างเว็บเพจโดยใช้ภาษา PHP บทที่ 32

การสร้างและใช้งานคลาส (class) และออปเจค (object)

ภาษาแบบ scripting language ในปัจจุบันหลายๆภาษาก็สนับสนุนการเขียนโปรแกรมเชิงวัตถุด้วย ตัวอย่างเช่น Perl และ PHP ก็รวมอยู่ในนั้นด้วย แม้ว่าจะไม่ซับซ้อนเหมือนอย่างภาษาซีพลัสพลัสหรือจาวาก็ตาม

คลาสคือโครงสร้างที่ประกอบด้วยสมาชิก (class members) หรือคุณสมบัติ (properties) ตามแต่จะเรียก และ ฟังก์ชันสมาชิก (member functions) การนิยามคลาสขึ้นมาใช้งานจะเริ่มด้วย class { ... } โดยข้างในจะมีส่วนของตัวแปรสมาชิก และฟังก์ชันสมาชิกตามลำดับ ฟังก์ชันที่มีชื่อเดียวกับคลาสจะเรียกว่า class constructor ทุกครั้งที่มีการสร้างออปเจคจากคลาสโดยใช้คำสั่ง new ฟังก์ชันที่ทำหน้าที่เป็น class constructor ก็จะถูกเรียกมาทำงานก่อนทุกครั้ง ประโยชน์ของการใช้งานก็เช่น ใช้กำหนดค่าเริ่มต้น หรือเตรียมพร้อมก่อนที่จะเริ่มใช้ออปเจค

ลองดูตัวอย่าง การเขียนคลาสสำหรับแบบข้อมูลเชิงนามธรรม (Abstract Data Type) ที่เรียกว่า stack การทำงานของ stack ก็เป็นดังนี้ ถ้าเราใส่ข้อมูลเข้าไป ข้อมูลเหล่านั้นก็จะถูกเก็บไว้เสมือนกับว่า วางซ้อนกันจากข้างล่างขึ้นข้างบน ถ้าเราจะดึงข้อมูลออกมาใช้ก็จะได้ข้อมูลที่อยู่ข้างบนสุด ซึ่งก็คือข้อมูลที่เราใส่เข้าไปครั้งล่าสุดนั่นเอง หน้าที่ของ stack ที่สำคัญก็มีเช่น

 push()   ใส่ข้อมูลไว้ใน stack
 pop()  ดึงข้อมูลออกมา
 is_empty()  ตรวจดูว่า stack มีข้อมูลอยู่อีกหรือไม่ 
 get_size()  หาจำนวนของข้อมูลที่ถูกเก็บไว้ใน stack

ตัวอย่างการสร้างคลาส stack ในภาษา PHP ทำได้ดังตัวอย่างต่อไปนี้
 
<?

class stack {
   var $arrays; 
   var $size;

   function stack() { // class constructor
     $this->size = 0;
     unset($this->arrays);
   }

   function push($elem) {  // put an element on stack
     $this->arrays[$this->size] = $elem;
     $this->size++;
   }

   function get_size() {  // get number of elements stored
     return $this->size;
   }

   function is_empty() { // is stack empty ?
     return ($this->size == 0) ? true : false;
   }

   function pop() { // retrieve an element from the top of stack
     if ( $this->is_empty() == false ) {
       $this->size--;
       return $this->arrays[$this->size];
     }
     else
       return 0;
   }

$inst = new stack; // create an object from stack class
echo "initial stack size=".($inst->get_size()),"<BR>\n";

for ($i=0; $i < 10; $i++) {
  $inst->push( ($i*7)%11 );
}
echo "current stack size=".($inst->get_size()),"<BR>\n";

while (! $inst->is_empty() ) {
  echo "pop ".$inst->pop(),"<BR>\n";
}

echo "stack is ".($inst->is_empty() ? "empty." : "not empty.")."<BR>\n";

$inst = 0; // unuse this instance of class stack
?>

โปรดสังเกตว่า ตัวแปร $this ที่ปรากฎอยู่ในคลาสจะเหมือน this ที่เราใช้ในภาษาซีพลัสพลัส และการนิยามและสร้างฟังก์ชันสมาชิกจะทำภายในคลาสทั้งหมด (เหมือนในภาษาจาวา)

PHP ยังสนับสนุนการสืบทอดคุณสมบัติของคลาส (inheritance) ทำให้เราสามารถสร้างคลาสขึ้นมาใหม่ โดยใช้คลาสที่มีอยู่เดิมและเพื่อส่วนขยายเข้าไป การสืบสอดคุณสมบัติจากคลาสหนึ่งไปยังอีกคลาสหนึ่ง จะใช้คำสั่ง extends คล้ายกับของภาษาจาวา ตามตัวอย่างดังนี้
 
<?

class stack {
   var $arrays; 
   var $size;

   function stack() {
     echo "DEBUG> stack constructor<BR>\n";
     $this->size = 0;
     unset($this->arrays);
   }

   function push($elem) {
     $this->arrays[$this->size] = $elem;
     $this->size++;
   }

   function get_size() {
     return $this->size;
   }

   function is_empty() {
     return ($this->size == 0) ? true : false;
   }

   function pop() {
     if ( $this->is_empty() == false ) {
       $this->size--;
       return $this->arrays[$this->size];
     }
     else
       return 0;
   }

// class LimitedStack is derived from class stack.

class LimitedStack extends stack {
   var $max_size;

   function LimitedStack ($capacity = 10)  {
      $this->stack(); // call stack's constructor explicitly.
      echo "DEBUG> LimitedStack constructor<BR>\n";
      $this->max_size = $capacity;
   }

   function is_full() {
     return ($this->max_size <= $this->size) ? true : false;
   }

   function push($elem) {
     if ($this->is_full() == false) {
       $this->arrays[$this->size] = $elem;
       $this->size++;
     }
     else {
       echo "stack is full!\n";
     }
   }
}

$inst = new LimitedStack(5);
echo "initial stack size=".($inst->get_size()),"<BR>\n";
for ($i=0; $i < 10; $i++) {
  if (! $inst->is_full() ) {
     $inst->push( ($i*7)%11 );
  }
  else  break;
}
echo "current stack size=".($inst->get_size()),"<BR>\n";
echo "stack is ".($inst->is_empty() ? "empty." : "not empty.")."<BR>\n";
 

คลาส LimitedStack นี้มีคุณสมบัติที่ได้รับมาจากคลาส stack แต่แตกต่างตรงที่ว่า เราได้กำหนดความจุ ของ LimitedStack เอาไว้ โดยตัวแปร $max_size ผู้ใช้จะต้องกำหนดขนาดความจุของออปเจคจากคลาส LimitedStack ก่อนใช้ ถ้าไม่กำหนดก็จะใช้ค่า 10 เป็นค่าความจุโดยอัตโนมัติตามตัวอย่าง (เป็น default parameter)

เมื่อมีการกำหนดความจุก็จะต้องมีการเขียนฟังก์ชันสมาชิกเพิ่มขึ้นอีก ชื่อ is_full()  เพื่อตรวจสอบดูว่า จำนวนของข้อมูลใน stack เท่ากับความจุที่กำหนดไว้แล้วหรือไม่

โปรดสังเกตว่า PHP สนับสนุนการนิยามฟังก์ชันทับฟังก์ชันเดิมของคลาสที่ได้รับคุณสมบัติมา และสิ่งที่จะลืมไม่ได้คือ constructor จากคลาสลูก (child class) จะไม่เรียกใช้ constructor จากคลาสแม่ (parent class) จะต้องมีการเรียกใช้อย่างเจาะจง

ในกรณีที่เราสร้างอาร์เรย์สำหรับเก็บออปเจค เวลาจะใช้ออปเจคแต่ละตัว จะต้องใช้ตัวแปรช่วยตามตัวอย่างต่อไปนี้
 
<?
  // array of objects

class MyObj { 
 var $id;

 function MyObj( $set_id) {
   // $id = $set_id; <-- this does't work if you forget to use $this
   $this->id = $set_id;
 }

 function show() {
   echo "hello world $this->id<BR>\n";
 }
}

// can create the array of objects
$obj_array = array();
$obj_array[] = new MyObj(1);
$obj_array[] = new MyObj(2);
$obj_array[] = new MyObj(3);

// To access each object we must use help variable like follows:
for($i=0; $i < count($obj_array); $i++) {
  $tmp = $obj_array[$i];
  $tmp->show();
}

?>

จากตัวอย่างเราใช้ตัวแปร $tmp ในการเข้าถึงออปเจคแต่ละตัวในถูกเก็บไว้ในอาร์เรย์ $obj_array เนื่องจากเราไม่สามารถเรียกใช้ฟังก์ชันของออปเจคได้โดยตรงถ้าออปเจคอยู่ในอาร์เรย์ เช่น $obj_array[0]->show();

Home | บทเรียน PHP | บทเรียน HTML | บทเรียน Perl | Java Script | บทเรียน Asp |
ติดต่อ webmaster   © 2005 Inc.Thailand Allright Reserved iqjung International Co., Ltd. Design by iqjung :800*600 Resolution IE 5.5 Up ^^