มัดรวม PHP OOP

TOPIC LIST

  1. Public & Class Structure
  2. Protected & Private
  3. Inheritance
  4. Class & method : Final // Property : const
  5. Static
  6. self and parent
  7. Abstract Class
  8. Interface Class



วิธีการอ่านบทความนี้ให้เข้าใจไวขึ้น !!!
1.อ่านคำอธิบายข้างใต้แต่ละ Topic
2.เริ่มอ่านโค้ดจากจุด START สีเขียว


เรื่อง - Public & Class Structure

Property แบบ publicสามารถเข้าถึง และ แก้ไขได้จากภายนอกคลาส
function หรือ method แบบ public : สามารถเข้าถึงจากภายนอกคลาส ได้

  1. <?php
  2. class people {                  <-- Class

  3.  public $name1;                 <-- Property
  4.  public function say() {        <-- Method
  5.   $name2 = 'ak2';               <-- Variable name2 of method
  6.   echo "property " . $this->name1;  // การเข้าถึง Property ของ Class ใช้ $this->
  7.   echo "<br>";
  8.   echo "variable in method:" . $name2; // การเข้าถึงตัวแปรภายใน method
  9.  }
  10. }


  11. ------- START
  12. $obj = new people;    //  1.สร้าง object จากคลาส: people
  13. $obj->name1 = 'ak1';  //  2.สามารถกำหนดค่าให้  Property : name ของคลาส people
  14. $obj->say();          //  3.เรียกใช้ method say();
  15. ?>

output
hi property : ak1
hi variable in method : ak2







เรื่อง - Protected & Private

ตัวแปร หรือ Method แบบ Protected  : สามารถเข้าถึงจากภายนอกคลาสได้
ตัวแปร หรือ Method แบบ Private      : สามารถเข้าถึงจากภายนอกคลาสได้ 
                                    โดยใช้ public method ภายใน Class return ออกมา (หัวข้อถัดไป)

  1. <?php
  2. class one
  3. {
  4.         protected $protected_name = 'ak1';
  5.         private $private_name = 'ak2';
  6.        
  7.         protected function protec_method() {
  8.                 echo 'protected';
  9.         }
  10.         private function priv_method() {
  11.                 echo 'private';
  12.         }
  13. }
  14. class two extends one
  15. {
  16.         public function show() {


  17.                 echo $this->protected_name;  // สามารถเข้าถึงได้
  18.                 echo "<br>";                 
  19.                 echo $this->private_name;    // ไม่ สามารถเข้าถึงได้
  20.                 echo "<br>"; 
  21.                 echo $this->protec_method();  // สามารถเข้าถึงได้
  22.                 echo $this->priv_method();    // ไม่ สามารถเข้าถึงได้
  23.         }
  24. }

  25. ---- START

  26. $obj = new two;        // 1. สร้าง object จากคลาส two
  27. $obj->show();          // 2. เรียกใช้ method : show ของคลาส two (ไปดูที่ method : show)
  28. ?>


output
ak1   -- protected_name
Notice: Undefined property: two::$private_name in /var/www/jquery/class.php on line 26 - private_name

protected  - protec_method
Fatal error: Call to private method one::priv_method() from context 'two' in /var/www/jquery/class.php on line 32  - priv_method






เรื่อง - Inheritance หรือ การสืบทอด
เพื่อความเข้าใจยิ่งขึ้นเรื่อง Private และ Protected



  1. ไฟล์ OneClass.php

  2. <?php
  3. class one
  4. {
  5.         private $private_name = 'ak2';
  6.    
  7.         public function get_private_name() {
  8.                 return $this->private_name;    
  9.         }
  10. }
  11. ?>



  1. ไฟล์ TwoClass.php

  2. <?php
  3. require_once("OneClass.php"); // เรียกใช้ properties และ method ของ คลาส one

  4. class two extends one
  5. {
  6.         public function show() {
  7.                 echo $this->get_private_name();  // 3. output : ak2
  8.         }
  9. }

  10. ------- START
  11. $obj = new two;      // 1. สร้าง object จากคลาส two
  12. $obj->show();        // 2. เรียกใช้ method show (ดูต่อ method show บรรทัด 10)
  13. ?>









เรื่อง - Final class & method
           และ Property : const

  • Final class จะไม่สามารถถูกสืบทอดไปใช้งานได้
  • คลาสลูกจะไม่สามารถเขียน Method ใหม่ทับ Method ของ Final class ได้
  • Property แบบ const  จะไม่สามารถถูกแก้ไขค่าได้








เรื่อง - Static เรียกใช้โดยไม่ต้องสร้าง Object
static method  คือ method ที่เรียกใช้ได้โดยตรง โดยไม่ต้องสร้าง new Object ก่อน
static property คือ property สำหรับใช้งานร่วมกัน


เรียกใช้นอกคลาส

class_name::$property_name


  1. <?php
  2. class one
  3. {
  4.         public static $name = "ak1";           
  5.         public static function show_name(){
  6.                 echo "method showname";
  7.         }
  8. }
  9. ----- START
  10. echo one::$name;               //  output : ak1                             
  11. echo one::show_name();         //  output : method showname
  12. ?>




เรื่อง - self and parent
self      << เรียกใช้ method หรือ property ของตัวเอง
parent  << เรียกใช้ method หรือ property ของคลาสแม่


  1. <?php
  2. class one
  3. {
  4.         public function __construct(){
  5.                 echo "construct one";
  6.         }
  7. }
  8.   
  9. class two extends one
  10. {
  11.         public function __construct()
  12.         {
  13.                 echo "construct two";
  14.         }
  15.          public function show()
  16.         {
  17.                 self::  __construct();
  18.          }
  19. }
  20. $obj = new two();            <<<<  __construct ของคลาส two ทำงานอัตโนมัติ
  21. $obj->show();                <<<<  method show เรียกใช้ __construct ของตัวเอง
  22. ?>

Output
construct twoconstruct two


*หากเปลี่ยน self::__construct();  เป็น parent::__construct();
จะได้ output : construct twoconstruct one





ตัวอย่างที่ 2  -
ใช้ parent:: เรียกใช้ property และ method ของคลาสแม่


  1. <?php
  2. class one
  3. {
  4.         public static $name = "ak1";


  5.         public function show(){
  6.                 echo "method one show";
  7.         }
  8. }
  9. class two extends one                  
  10. {
  11.          public function show()
  12.         {
  13.                 parent::show();      // OUTPUT : Method show ของคลาสแม่ (คือ one)
  14.                 echo parent::$name;  // OUTPUT : Property $name ของคลาสแม่
  15.          }
  16. }
  17. ------------ START
  18. $obj = new two();       // 1. สร้าง Object จากคลาส two               
  19. $obj->show();              // 2. เรียกใช้ method show ของคลาส two (อ่านต่อเมทอด show)           
  20. ?>

Output
method one show
ak1







เรื่อง - Abstract Class คลาสแม่แบบ


  • Abtract Class สามารถมี Method แบบให้ Class ลูกใช้งานได้ทันที
  • คลาสลูกต้องมี Method ที่เหมือนกับ Abstract Class ทุกประการ




  1. <?php

  2. abstract class one
  3. {
  4.         abstract function show();
  5.         abstract function update();
  6. }

  7. class two extends one
  8. {
  9.         public function show() // หากไม่มี method นี้จะ Error ทันที
  10.         {              
  11.         }
  12.         public function update(// หากไม่มี method นี้จะ Error ทันที
  13.         {              
  14.         }
  15. }
  16. $obj = new two();      
  17. ?>






เรื่อง - Interface Class คลาสแม่แบบ


  • คลาสใดใด สามารนำ Interface Class  ไป Implements ได้หลาย Interface
  • คลาสที่ Implements Interface ไป ต้องมี Method เหมือน Interface นั้น
  • คลาสที่ Implements Interface ก็ สามารถ extends class เข้าไปได้อีกด้วย 1 คลาส

   ตัวอย่าง
  1. <?php

  2. interface mom  {
  3.         public function name();
  4. }                                                    // กลุ่ม interface
  5. interface brother {
  6.         public function sex();
  7. }
  8. class boy {
  9.         public function walk()
  10.         {
  11.                 echo "walk";
  12.         }
  13. }

  14. // extends class boy และ implements interface : mom, brother
  15. class child extends boy implements mom, brother {
  16.         public function name()  // ต้องมี method name
  17.         {
  18.         }
  19.         public function sex()   // ต้องมี method sex
  20.         {         
  21.         }
  22. }

  23. ---------- START
  24. $obj = new child;       // 1. สร้าง object จากคลาส Child
  25. $obj->walk();                // 2. สามารถเรียกใช้ method walk(); ของ class boy ได้
  26. ?>

output :  walk



     ข้อควรจำ
  • interface ใช้ implement
  • abstract  ใช้ extends



สรุป
คุณสมบัติสำหรับสร้างคลาสแม่แบบ 
abstract , Interface

คุณสมบัติของ Class & Method & Property
public , static , protected , private

คุณสมบัติ แบบค่าคงที่ ไม่สามารถเปลี่ยนแปลงได้
Class & Method ใช้ : final
Property ใช้ : const

สืบทอดคุณสมบัติทำได้ 2 แบบ
extends สืบทอดจาก Class อื่นๆ  หรือสืบทอดจาก Abstract Class
implements  จาก Interface

เรียกใช้ method , property ของตัวเอง , เรียกใช้ method , property ของคลาสแม่
self::
parent::




ขอบคุณ VDO ต้นฉบับจาก thaicreate
http://www.thaicreate.com/community/php-oop-tutorial-vdo-online.html