Object Oriented PHP Step 12-17

Object Oriented PHP Step 12-17

อ่าน PHP OOP ตอนเริ่มต้น

Step 12:

เข้าถึงค่า property โดยตรง --ไม่ควรทำ

ถ้าคุณไม่ใช้ method เพื่อเรียกค่า property ของ object คุณสามารถเรียกค่าได้โดยใช้เครื่องหมายลูกศร -> และตามด้วยชื่อตัวแปร

ตัวอย่าง ที่เรามี property ที่ชื่อ name (ใน object $stefan) เราสามารถเรียกค่าได้โดยใช้

$stefan->name

ซึ่งนี่คือตัวอย่างที่ไม่ดี เพราะว่าจะทำให้จุดมุ่งหมายการเขียน OO PHP ของเราที่ดีนั้นเสียไปได้ เราควรจะใช้ getter method มากกว่า ซึ่งเดี๋ยวจะเล่าให้ฟังต่อไป

<?php include("class_lib.php"); ?>   </head>   <body>   <?php  $stefan = new person();   $jimmy = new person;  $stefan->set_name("Stefan Mischook");  $jimmy->set_name("Nick Waddles");     // การเข้าถึงค่า property โดยตรงของ class ซึ่งไม่ควรทำ    echo "Stefan's full name: ".$stefan->name;    ?>   </body> </html>

Step 13:

Constructors

ทุกๆ object มี method พิเศษที่ถูกสร้างขึ้นมาอัตโนมัติ (คล้ายๆกับ $this ที่เคยพูดไป) โดยมีชื่อว่า 'constructor' โดย constructors นี้ยอมให้เราใส่ค่าเข้าไปใน property ของ object ได้ ในขั้นตอนที่เราสร้าง object ขึ้นมาเลย

ถ้าคุณสร้าง __construct() function (สร้างหรือไม่ก็ได้) PHP จะทำการเรียก __construct() method ในขณะที่เราสร้าง object ใหม่ทันที

'construct' method เริ่มต้นด้วยเครื่องหมาย under score สองตัว (__) และตามด้วยคำว่า 'construct'

<?php    class person {  var $name;  function __construct($persons_name) {   $this->name = $persons_name;   }     function set_name($new_name) {     $this->name = $new_name;  }     function get_name() {      return $this->name;    }   }   

จากที่ได้เคยเล่าไปแล้วรอบนึง ถึงเรื่อง

function  = methods
variable = property

ดังนั้น ใน OO PHP นี้ เราก็จะใช้เฉพาะรูปแบบ ของ Object Oriented อย่างเดียว

Step 14:

สร้าง object พร้อมใช้ constructor

ตอนนี้เราได้สร้าง constructor method และเราสามารถเรียกค่าของ $name ได้เมื่อเราสร้าง person object ของเราขึ้นมา

เราจะใส่ค่าให้กับ constructor ได้ด้วยการใส่ argument เข้าไป (เหมือนกับที่เราทำกับ function นั่นล่ะ) ที่ด้านหลังของชื่อ class 

ตัวอย่าง

$stefan = new person("Stefan Mischook");

นี่จะเป็นการประหยัดเวลาที่เราจะต้องไปเรียกใช้ set_name() method โดยลดขนาดของโค้ดลง 

Constructor นี้ จะมีใช้โดยทั่วไปไม่ว่าจะเป็น PHP หรือ Java และภาษาอื่นๆ

<?php include("class_lib.php"); ?>   </head>   <body>   <?php  $stefan = new person("Stefan Mischook");  echo "Stefan's full name: ".$stefan->get_name();  ?>   </body> </html> ?>

อันนี้คือตัวอย่างสั้นๆ เพื่อแสดงให้เห็นการทำงานของ OO PHP ว่าจะช่วยเราประหยัดเวลา และลดจำนวนโค้ดลงได้อย่างไร โดยโค้ดน้อยลงก็แปลว่า bug น้อยลงด้วย

Step 15:

กำหนดสิทธการเข้าถึง property โดยใช้ 'access modifiers'

เรื่องพื้นฐานอีกเรื่องของ OOP ก็คือเรื่องการ pack เป็นก้อน (encapsulation) โดยเป็นแนวคิดเพื่อให้เราเขียนโค้ดที่ดีขึ้น ถ้าเราสามารถกำหนดสิทธการเข้าถึงโครงสร้างข้อมูล(properties) ใน object ของเราได้

เรากำหนดสิทธการเข้าถึง property ของ class ได้โดยใช้บางอย่างที่มีชื่อว่า 'access modifiers' โดยมี 3 แบบ คือ

 

  1. public
  2. private
  3. protected

 

'Public' คือค่า default ของ modifiers

<?php    class person {   var $name;   public $height;   protected $social_insurance;  private $pinn_number;    function __construct($persons_name) {   $this->name = $persons_name;   }     function set_name($new_name) {      $this->name = $new_name;  }   function get_name() {  return $this->name;  }     } ?>

เมื่อเราประกาศ property โดยใช้ 'var' นั่นจะมีความหมายว่าเป็น 'public' โดยทันที

Step 16:

กำหนดสิทธการเข้าถึง property ตอน 2

เมื่อคุณประกาศ property โดยใช้ 'private' จะมีเพียง class ตัวเองเท่านั้นที่จะสามารถเรียกใช้ได้

เมื่อคุณประกาศ property โดยใช้ 'protected' จะมีเพียง class ตัวเอง และ class ที่สืบทอดไป ที่สามารถเข้าถึงค่า property ได้ โดยอาศัยการสืบทอด ซึ่งจะกล่าวต่อไป

เมื่อคุณประกาศ property โดยใช้ 'public' จะไม่มีการกำหนดการเข้าถึง ระดับไหนก็สามารถเข้าถึงได้ทั้งหมด

เพื่อช่วยให้เข้าใจมากขึ้นในระบบ OOP ลองดูโค้ดดังต่อไปนี้ และดูผลของ PHP ที่ได้

ข้อแนะนำ-- อ่าน comment เพื่อดูข้อมูลเพิ่มเติมได้

<?php include("class_lib.php"); ?>    </head>    <body>  <?php    $stefan = new person("Stefan Mischook");     echo "Stefan's full name: " .  $stefan->get_name() ;      /*     $pinn_number เราตั้งค่าให้เป็น   private ดังนั้นก็จะทำให้เกิด error  ลองดูครับ    */      echo "Tell me private stuff: ".$stefan->pinn_number;    ?>    </body>   </html>

ถ้ามีการเข้าถึง private property จากภายนอก class ก็จะได้ error ประมาณว่า
'Fatal error: Cannot access private property person::$pinn_number in ...'

Step 17:

กำหนดสิทธการเข้าถึง method

ก็เหมือนกับ Property เลย เราสามารถกำหนดการเข้าถึง method ได้ โดยใช้ 3 access modifiers

 

  1. public
  2. protected
  3. private

 

ทำไมเราต้องมี access modifiers

อธิบายสั้นๆ- คือมีเพื่อควบคุมว่าอนุญาตให้ใครใช้งานได้บ้างนั่นเอง

เหตุผลของ access modifiers และ OO constructs อาจจะดูยุ่งยากเกินเข้าใจไปสักหน่อย แต่ว่านี่เป็นเพียงแค่เริ่มต้น ที่จะเปลี่ยนตัวคุณเอง

ดังนั้น เราสามารถกำหนดโครงสร้างในหลายๆส่วน ของ OOP ให้กับ programmer คนอื่นๆเข้าใจในงานของเราได้จากค่าพวกนี้อีกด้วย

<?php  class person {    var $name;    public $height;    protected $social_insurance;    private $pinn_number;         function __construct($persons_name){        $this->name = $persons_name;    }           private function get_pinn_number(){  return  $this->pinn_number;    }         }    ?>

** ตั้งแต่ method get_pinn_number() ที่เป็น private จะมีเพียงภายใน class นี้เท่านั้น  ถ้าคุณต้องการเรียกใช้ method นี้โดยตรงใน PHP Page คุณจะต้องประกาศเป็นแบบ public

อีกเรื่องที่ฝากไว้ตรงนี้ก็คือ ถ้าคุณได้ลองเขียนโค้ดด้วยตัวคุณเอง มันจะสร้างประสบการณ์และความแตกต่างได้เพิ่มขึ้นอีกมาก

บทความทั้งหมดนี้ แปล และเรียบเรียงมาจาก  http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-3.php
This article translate and remade from http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-3.php

Create: Modify : 2010-07-13 08:49:23 Read : 5925 URL :