เขียนโปรแกรมแบบ Class ด้วยภาษา PHP

บทความนี้จะมาสอนวิธีการเขียน Class ด้วยภาษา PHP ในรูปแบบต่างๆ ซึ่งการเขียนโปรแกรม PHP แบบ Class จะมีข้อดีที่มากกว่าการเขียนแบบ Structure ซึ่งหากใครได้ศึกษาการพัฒนาโปรแกรมแบบ OOP (Object Oriented Programming) ก็จะเข้าใจหลักการเขียนโปรแกรมแบบคลาสได้ง่ายขึ้น เรามาดูวิธีการใช้งานกันเลยครับ

 

 

สำหรับการเขียนโปรแกรมแบบ Class นั้นเราจะต้องเขียนคำสั่ง class จากนั้นตามด้วยชื่อ Class Name และตามด้วยการกำหนดค่า Properties และ Methods ต่างๆใน Class, การตั้ง Class Name นั้นจะไม่อนุญาติให้ใช้คำสงวน (Reserved word) ในการตั้งชื่อ คลิกเพื่อดูคำสงวน การตั้งชื่อที่ถูกต้องจะต้องนำด้วยตัวอักษร A-Z ตัวใหญ่ และสามารถใช้ _ (Underscore) และตามด้วยตัวเลขหรือตัวอักษรก็ได้ ตามรูปแบบดังนี้

^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$.

1. เริ่มต้นเขียนคลาสง่ายๆ : Simple_class

<?php class Simple_class { // สร้างตัวแปร public $var = 'a default value'; // สร้างฟังก์ชั่น public function display_var() { echo $this->var;
    }
}
 
// เรียกใช้งานคลาส Simple_class
 
$simple_class=new Simple_class(); // กำหนดค่า Instance ของคลาส Simple_class
$simple_class->display_var(); // เรียกใช้งานฟังชั่นจาก Instance $simple_class
 
/* End of file sample.php */

ตัวแปร $this จะสามารถใช้งานได้เมื่อตัวแปร หรือ ฟังก์ชั่นในคลาสถูกเรียกใช้ ตัวแปร $this จะอ้างอิงถึง ตัวแปรวัตถุ (Object Variable) จากนั้นจะใช้ -> เพื่อเรียกตัวแปรระดับต่อๆไป จากตัวอย่าง Class จะสามารถเรียกใช้ได้ก็ต่อเมื่อ มีการเรียกใช้ Class โดยใช้ตัวแปร Instance คลาสจากนั้นก็ทำการเรียกฟังก์ชั่นจากตัวแปร Instance เพื่อใช้งานคำสั่ง ตามตัวอย่าง

สังเกตว่าในภาษา php นั้นเวลาเขียนเป็น class ส่วนมากเขาจะนิยมไม่มี tag ปิด ?> เพราะเหตุผลของการแปรภาษาจาก php parser

ผลลัพท์โปรแกรม:

a default value

2. ตัวอย่างการสร้างคลาสโดยแสดงการเรียกตัวแปร $this

<?php class A { function foo() { if (isset($this)) { echo '$this ได้ถูกสร้างจากคลาส ('; echo get_class($this); echo ")\n"; } else { echo "\$this ไม่ได้ถูกสร้าง.\n"; } } } class B { function bar() { // อาจมีข้อความแจ้งเตือนข้อผิดพลาดถ้าคำสั่ง E_STRICT ถูกเปิดใช้งาน. A::foo(); } } $a = new A(); $a->foo();
 
// อาจมีข้อความแจ้งเตือนข้อผิดพลาดถ้าคำสั่ง E_STRICT ถูกเปิดใช้งาน.
A::foo();
$b = new B();
$b->bar();
 
// อาจมีข้อความแจ้งเตือนข้อผิดพลาดถ้าคำสั่ง E_STRICT ถูกเปิดใช้งาน.
B::bar();
 
/* End file sample2.php */

ผลลัพท์โปรแกรม:

$this ได้ถูกสร้างจากคลาส (A)$this ไม่ได้ถูกสร้าง.

$this ได้ถูกสร้างจากคลาส (B)

$this ไม่ได้ถูกสร้าง.

3. การสืบทอด Class (Extends)
การสืบทอดคลาสคือวิธีการคัดลอก คุณสมบัติจากคลาสหนึ่งไปสู่คลาสหนึ่ง อาทิเช่น ตัวแปรจากคลาส A จะมีอยู่ในคลาส B ด้วย หรือฟังก์ชั่น A ก็จะมีอยู่ในฟังก์ชั่น B ด้วย ลองมาดูตัวอย่างกันครับ

<?php class SimpleClass { function displayVar() { echo "a default value\n"; } } class ExtendClass extends SimpleClass { // Redefine the parent method function displayVar() { echo "Extending class\n"; parent::displayVar(); } } $extended = new ExtendClass(); $extended->displayVar();
 
/* End file sample3.php */

ผลลัพท์โปรแกรม:

Extending class

a default value

4. การกำหนดคุณสมบัติตัวแปรและฟังก์ชั่นแบบ public , private และ protected
เราสามารถกำหนดให้ตัวแปรและฟังก์ชั่นภายในคลาสว่าจะให้สามารถเรียกใช้ได้จากที่ไหนได้บ้าง โดยเราสามารถกำหนดได้อยู่ 3 แบบคือ

  • – public สามารถเรียกได้ทุกที่ ทั้งภายในและภายนอกคลาส
  • – private สามารถเรียกได้เฉพาะในคลาส
  • – protected สามารถเรียกได้เฉพาะในคลาส และคลาสที่ขยายคลาสนี้
<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
 
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
 
 
/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';
 
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
 
$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined
ความคิดเห็น
(มีผู้เข้าชม 7,657 ครั้ง, 1 ผู้เข้าชมในวันนี้)

Related posts