- Public & Class Structure
- Protected & Private
- Inheritance
- Class & method : Final // Property : const
- Static
- self and parent
- Abstract Class
- Interface Class
วิธีการอ่านบทความนี้ให้เข้าใจไวขึ้น !!!
1.อ่านคำอธิบายข้างใต้แต่ละ Topic
2.เริ่มอ่านโค้ดจากจุด START สีเขียว
เรื่อง - Public & Class Structure
Property แบบ public : สามารถเข้าถึง และ แก้ไขได้จากภายนอกคลาส
function หรือ method แบบ public : สามารถเข้าถึงจากภายนอกคลาส ได้
- <?php
- class people { <-- Class
- public $name1; <-- Property
- public function say() { <-- Method
- $name2 = 'ak2'; <-- Variable name2 of method
- echo "property " . $this->name1; // การเข้าถึง Property ของ Class ใช้ $this->
- echo "<br>";
- echo "variable in method:" . $name2; // การเข้าถึงตัวแปรภายใน method
- }
- }
- ------- START
- $obj = new people; // 1.สร้าง object จากคลาส: people
- $obj->name1 = 'ak1'; // 2.สามารถกำหนดค่าให้ Property : name ของคลาส people
- $obj->say(); // 3.เรียกใช้ method say();
- ?>
output
hi property : ak1
hi variable in method : ak2
เรื่อง - Protected & Private
ตัวแปร หรือ Method แบบ Protected : สามารถเข้าถึงจากภายนอกคลาสได้
ตัวแปร หรือ Method แบบ Private : สามารถเข้าถึงจากภายนอกคลาสได้
โดยใช้ public method ภายใน Class return ออกมา (หัวข้อถัดไป)
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
ตัวแปร หรือ Method แบบ Protected : สามารถเข้าถึงจากภายนอกคลาสได้
ตัวแปร หรือ Method แบบ Private : สามารถเข้าถึงจากภายนอกคลาสได้
โดยใช้ public method ภายใน Class return ออกมา (หัวข้อถัดไป)
- <?php
- class one
- {
- protected $protected_name = 'ak1';
- private $private_name = 'ak2';
- protected function protec_method() {
- echo 'protected';
- }
- private function priv_method() {
- echo 'private';
- }
- }
- class two extends one
- {
- public function show() {
- echo $this->protected_name; // สามารถเข้าถึงได้
- echo "<br>";
- echo $this->private_name; // ไม่ สามารถเข้าถึงได้
- echo "<br>";
- echo $this->protec_method(); // สามารถเข้าถึงได้
- echo $this->priv_method(); // ไม่ สามารถเข้าถึงได้
- }
- }
- ---- START
- $obj = new two; // 1. สร้าง object จากคลาส two
- $obj->show(); // 2. เรียกใช้ method : show ของคลาส two (ไปดูที่ method : show)
- ?>
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
- ไฟล์ OneClass.php
- <?php
- class one
- {
- private $private_name = 'ak2';
- public function get_private_name() {
- return $this->private_name;
- }
- }
- ?>
- ไฟล์ TwoClass.php
- <?php
- require_once("OneClass.php"); // เรียกใช้ properties และ method ของ คลาส one
- class two extends one
- {
- public function show() {
- echo $this->get_private_name(); // 3. output : ak2
- }
- }
- ------- START
- $obj = new two; // 1. สร้าง object จากคลาส two
- $obj->show(); // 2. เรียกใช้ method show (ดูต่อ method show บรรทัด 10)
- ?>
เรื่อง - 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
- <?php
- class one
- {
- public static $name = "ak1";
- public static function show_name(){
- echo "method showname";
- }
- }
- ----- START
- echo one::$name; // output : ak1
- echo one::show_name(); // output : method showname
- ?>
เรื่อง - self and parent
self << เรียกใช้ method หรือ property ของตัวเอง
parent << เรียกใช้ method หรือ property ของคลาสแม่
- <?php
- class one
- {
- public function __construct(){
- echo "construct one";
- }
- }
- class two extends one
- {
- public function __construct()
- {
- echo "construct two";
- }
- public function show()
- {
- self:: __construct();
- }
- }
- $obj = new two(); <<<< __construct ของคลาส two ทำงานอัตโนมัติ
- $obj->show(); <<<< method show เรียกใช้ __construct ของตัวเอง
- ?>
Output
construct twoconstruct two
*หากเปลี่ยน self::__construct(); เป็น parent::__construct();
จะได้ output : construct twoconstruct one
ตัวอย่างที่ 2 -
ใช้ parent:: เรียกใช้ property และ method ของคลาสแม่
- <?php
- class one
- {
- public static $name = "ak1";
- public function show(){
- echo "method one show";
- }
- }
- class two extends one
- {
- public function show()
- {
- parent::show(); // OUTPUT : Method show ของคลาสแม่ (คือ one)
- echo parent::$name; // OUTPUT : Property $name ของคลาสแม่
- }
- }
- ------------ START
- $obj = new two(); // 1. สร้าง Object จากคลาส two
- $obj->show(); // 2. เรียกใช้ method show ของคลาส two (อ่านต่อเมทอด show)
- ?>
Output
method one show
ak1
เรื่อง - Abstract Class คลาสแม่แบบ
- Abtract Class สามารถมี Method แบบให้ Class ลูกใช้งานได้ทันที
- คลาสลูกต้องมี Method ที่เหมือนกับ Abstract Class ทุกประการ
- <?php
- abstract class one
- {
- abstract function show();
- abstract function update();
- }
- class two extends one
- {
- public function show() // หากไม่มี method นี้จะ Error ทันที
- {
- }
- public function update() // หากไม่มี method นี้จะ Error ทันที
- {
- }
- }
- $obj = new two();
- ?>
เรื่อง - Interface Class คลาสแม่แบบ
- คลาสใดใด สามารนำ Interface Class ไป Implements ได้หลาย Interface
- คลาสที่ Implements Interface ไป ต้องมี Method เหมือน Interface นั้น
- คลาสที่ Implements Interface ก็ สามารถ extends class เข้าไปได้อีกด้วย 1 คลาส
ตัวอย่าง
- <?php
- interface mom {
- public function name();
- } // กลุ่ม interface
- interface brother {
- public function sex();
- }
- class boy {
- public function walk()
- {
- echo "walk";
- }
- }
- // extends class boy และ implements interface : mom, brother
- class child extends boy implements mom, brother {
- public function name() // ต้องมี method name
- {
- }
- public function sex() // ต้องมี method sex
- {
- }
- }
- ---------- START
- $obj = new child; // 1. สร้าง object จากคลาส Child
- $obj->walk(); // 2. สามารถเรียกใช้ method walk(); ของ class boy ได้
- ?>
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