การบันทึก Object เก็บไว้ใช้งานภายหลัง
บทความนี้เกิดจากข้อสงสัยละครับ ว่าเราจะสามารถบันทึก Object เก็บไว้ใช้งานได้ด้วยวิธีไหน ส่วนจะเอาไปใช้ประโยชน์อะไรได้ก็ค่อยว่ากันอีกที
โค้ดของคลาส test.class.php
โค้ดด้านบนเป็นคลาสที่ใช้ในการทดสอบครับ สังเกตนะครับว่าผมกำหนด property มีค่าเป็น 1 และฟังก์ชั่น run จะมีการบวกค่าที่ส่งเข้าไปด้วย property
โค้ดหน้า index.php ซึ่งเป็นหน้าหลักที่มีการสร้างคลาสในครั้งแรก มีการเรียกใช้เมธอดรัน ได้ผลลัพท์เป็น 2 (มาจาก 1 + property) และมีการกำหนดค่า property เป็นค่าใหม่
ในการบันทึก Object เป็นไฟล์เราจะต้องแปลง Object เป็น String ก่อนด้วยฟังก์ชั่น serialize() หลังจากนั้นบันทึกเป็นไฟล์ teststored ครับ ถ้าอยากรู้ว่ามันบันทึกอะไรลงไปก็ไปเปิดดูครับ
ทดลองเรียกใช้คลาสที่บันทึกไว้ ขั้นตอนแรกก็ include เอาต้นแบบคลาสเข้ามาก่อน จากนั้นก็ไปอ่านไฟล์และแปลงกลับเป็น Object ด้วย &unserialize() อย่าลืมใส่ & ข้างหน้าฟังก์ชั่นด้วยเพราะเราต้องการผลลัพท์เป็น Object
ผลการเรียกคำสั่ง run() จะได้ผลลัพท์เป็น 3 เนื่องจากเรามีการแก้ไขค่าของ property เป็น 2 ไปก่อนหน้าที่เราจะบันทึก
แถมให้อีกอัน ลองสร้างลิงค์สำหรับส่ง Object ไปใช้งานที่หน้าอื่น (เช่น test3.php)
โค้ดนี้จะอยู่ถัดจากการแปลง String เป็น Object แล้วในหน้า index.php (ตามด้านบน) โดยจะเป็นการส่งค่าตัวแปร $stroed ไปยังหน้าถัดไป
ส่วนโค้ดหน้า test3.php รับค่ามาแล้วประมวลผลต่อ
รับค่ามาจาก $_GET และแปลงกลับเป็น Object ด้วย &unserialize() เหมือนเดิม
โค้ดของคลาส test.class.php
class Test
{
public $property = 1;
public function run($param)
{
echo 'This param is : '.($param + $this->property);
}
}
โค้ดด้านบนเป็นคลาสที่ใช้ในการทดสอบครับ สังเกตนะครับว่าผมกำหนด property มีค่าเป็น 1 และฟังก์ชั่น run จะมีการบวกค่าที่ส่งเข้าไปด้วย property
โค้ดหน้า index.php ซึ่งเป็นหน้าหลักที่มีการสร้างคลาสในครั้งแรก มีการเรียกใช้เมธอดรัน ได้ผลลัพท์เป็น 2 (มาจาก 1 + property) และมีการกำหนดค่า property เป็นค่าใหม่
// include class
include ('test.class.php');
// Create Object
$obj = new Test;
$obj->run(1); // ผลลัพท์ 2
$obj->property = 2;
// แปลง Object เป็น String
$stored = serialize($obj);
// บันทึก Object เป็นไฟล์
$f = fopen('teststored', 'wb');
fwrite($f, $stored);
fclose($f);
ในการบันทึก Object เป็นไฟล์เราจะต้องแปลง Object เป็น String ก่อนด้วยฟังก์ชั่น serialize() หลังจากนั้นบันทึกเป็นไฟล์ teststored ครับ ถ้าอยากรู้ว่ามันบันทึกอะไรลงไปก็ไปเปิดดูครับ
ทดลองเรียกใช้คลาสที่บันทึกไว้ ขั้นตอนแรกก็ include เอาต้นแบบคลาสเข้ามาก่อน จากนั้นก็ไปอ่านไฟล์และแปลงกลับเป็น Object ด้วย &unserialize() อย่าลืมใส่ & ข้างหน้าฟังก์ชั่นด้วยเพราะเราต้องการผลลัพท์เป็น Object
// include class
include ('test.class.php');
// อ่านไฟล์และแปลงกลับเป็น Object
$obj = &unserialize(file_get_contents('teststored'));
// รัน
$obj->run(1);
ผลการเรียกคำสั่ง run() จะได้ผลลัพท์เป็น 3 เนื่องจากเรามีการแก้ไขค่าของ property เป็น 2 ไปก่อนหน้าที่เราจะบันทึก
แถมให้อีกอัน ลองสร้างลิงค์สำหรับส่ง Object ไปใช้งานที่หน้าอื่น (เช่น test3.php)
echo '<br><a href="test3.php?test='.rawurlencode($stored).'">Send Object</a>';
โค้ดนี้จะอยู่ถัดจากการแปลง String เป็น Object แล้วในหน้า index.php (ตามด้านบน) โดยจะเป็นการส่งค่าตัวแปร $stroed ไปยังหน้าถัดไป
ส่วนโค้ดหน้า test3.php รับค่ามาแล้วประมวลผลต่อ
// include class
include ('test.class.php');
$obj = &unserialize($_GET['test']);
$obj->run(1);
รับค่ามาจาก $_GET และแปลงกลับเป็น Object ด้วย &unserialize() เหมือนเดิม