Long Live The King
ข้าพเจ้าไม่ได้มีพรสวรรค์พิเศษอะไร ข้าพเจ้าเพียงแต่มีความกระหายใคร่รู้อยู่เสมอ ทุ่มเทให้กับสิ่งที่อยากรู้ พากเพียรอย่างทรหด และสำรวจวิจารณ์ความรู้ของตัวเองเป็นประจำ ปัจจัยเหล่านี้คือที่มาของแนวคิดต่างๆ ของข้าพเจ้า .... อัลเบิร์ต ไอน์สไตน์

วันพุธที่ 4 กันยายน พ.ศ. 2556

Inheritance การสืบทอดคุณสมบัติ ของClass OOP PHP



ได้ยินกันบ่อยๆ inheritance เป็นถ่ายทอดคุณสมบัติของแม่แบบ หรือ Class หลักที่กำหนดให้มีคุณสมบัติต่างๆ ที่จำเป็นต้องมี ด้วยการสืบทอดของ Class ลูก(Sub-Class)จึงทำให้ Classลูก สามารถมีคุณสมบัติเฉพาะที่เหมือนกับ Classหลัก และสามารถเพิ่มคุณสมบัติอื่นเข้าไปได้อีกในคลาสนี้....

สมมุติว่า มีพ่อแม่คู่หนึ่ง ชื่อ a กับ b และสมมุติให้ a,b เป็น Class ParentClass
- a กับ b มีลูกด้วยกัน 3คน ชื่อ c, d, f และสมมุติให้ c,d,f เป็น Class ChildClass
- a กับ b มีคุณสมบัติเฉพาะดังนี้  ชื่อ ความสูง น้ำหนัก เพศ มีพฤติกรรมดังนี้ วิ่งสองขา นอนหลับ การกิน
คุณสมบัติและพฤติกรรมเหล่านี้จะถูกถ่ายทอดไปสู่ลูกๆ ทั้ง 3 ด้วย

แล้วทำอย่างไรให้ ParentClass รู้ว่า ChildClass เป็น Class ลูก(Sub-Class) ของตัวเอง
ก็ต้องประกาศให้เป็นที่รู้กันด้วย keyword ที่ชื่อ extends
รูปแบบ
class ChildClass extends ParentClass
{
//doSometing....
}
เพียงแค่นี้ ClidClass ก็สามารถเรียกใช้คุณสมบัติจาก ParentClass ได้แล้วครับ

ok. เดี๋ยวมาทำให้มันเห็นภาพแบบ ง่ายๆ สั้นๆกันครับ
ผมจะเริ่มด้วยการสร้างไฟล์ขึ้นมา 3 ไฟล์ คือ index.php, Parentclass.php, Childclass.php
ผมจะเริ่มที่ไฟล์ Parentclass.php ก่อน

ไฟล์ Parentclass.php
class ParentClass
{
    public function __construct()
    {
        echo 'ฉันสามารถวิ่ง 2 ขาได้';
    }
}
ท่านคงจะจำ method __construct() ได้ ถ้าไม่ได้ก็ให้ไปอ่านบทความก่อนหน้านี้ครับ
จากนั้นผมก็จะเรียก method __construct() ด้วยการสร้างอ็อบเจ็ค ที่ไฟล์ index.php ดังนี้

ไฟล์ index.php
ไฟล์ index.php
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type"
        content="text/html; charset=UTF-8">
        <title></title>
    </head>
  <body>
<?php
require_once('Parentclass.php');
$ab = new ParentClass();
?>
  </body>
</html>

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้



จากนั้นผมก็สร้าง classลูกขึ้นมา ชื่อว่า ChildClass
แล้วผมก็นำเข้าไฟล์ Parentclass.php ด้วยการ require_once()
require_once('Parentclass.php');

ไฟล์ Childclass.php
class ChildClass extends ParentClass
{
   
}
ไฟล์ Childclass.php มีแค่นี้ไม่มีอะไรเลย แต่สามารถ output ได้เหมือนกับ PrentClass ได้ทุกประการ

การนำเข้าไฟล์ Parentclass.php ท่านจะนำเข้าตรงไฟล์ Childclass.php ก็ได้ หรือที่ไฟล์ index.php
ก็ได้ แต่ถ้าท่านนำเข้าที่ไฟล์ Childclass.php ก็ไม่ต้องไปนำเข้าที่ไฟล์ index.php อีก เดี๋ยวผมขอเอาไปนำ
เข้าที่ไฟล์ index.php ก็แล้วกัน จากนั้นผมก็ output ที่ไฟล์ index.php
ไฟล์ index.php
require_once('Parentclass.php');
require_once('Childclass.php');

$cdf = new ChildClass();

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้



ที่นี้เดี๋ยวผมจะเปลี่ยนวิธีเรียก function __contruct ของ ParentClass ใหม่ด้วยการใช้ คำว่า parent แล้วตามด้วยเครื่องหมาย ::
รูปแบบ
ไฟล์ Childclass.php
class ChildClass extends ParentClass
{
   function __construct()
    {
        parent::__construct();
    }
}

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้


ทุกอย่างยังสืบทอดได้เหมือนเดิม

แล้วถ้าผมมี mathod เพิ่มขึ้นมา 2 mathod  ที่ไฟล์ Parentclass.php ดังนี้
class ParentClass
{
    public function __construct()
    {
        echo 'ฉันสามารถวิ่ง 2 ขาได้';
    }

    public function doSometing()
    {
        return 'call me doSometing';
    }
}
จากนั้นผมก็ เรียก method doSometing() ที่ไฟล์ Childclass.php ดังนี้
ไฟล์ Childclass.php
class ChildClass extends ParentClass
{
    public function __construct() 
    {
        parent::__construct();
        echo $this->doSometing();
    }
}

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้ call me doSometing



ในบทความนี้ท่านก็ได้เห็น วิธีการสืบทอดคุณสมบัติ จาก Class(แม่แบบ) ของ Classลูก(Sub-Class)
พร้อมทั้งวิธีการเรียกใช้งาน ผิดพลาดยังไงก็ขออภัยด้วยครับ สำหรับบทความนี้ผมก็ขอจบเพียงเท่านี้.....

0 ความคิดเห็น:

แสดงความคิดเห็น

© Bookneo, AllRightsReserved.

ขับเคลื่อนโดย Blogger Designed by Nikhorn Thongchuay