เปรียบเทียบความเร็วในการเข้าถึงข้อมูลของตัวแปรแอเรย์ กับ property ของ Object
ในการทดสอบนี้ จะมีการเตรียมตัวแปรแอเรย์ และอ๊อบเจ็คก่อนทำการวนลูปเพื่อทดสอบ (ตรวจสอบการเข้าถึงข้อมูลเพียงอย่างเดียว)
แบบที่หนึ่ง การเข้าถึงข้อมูลประเภท Object
แบบที่สอง การเข้าถึงข้อมูลประเภท Array
ผลการทดสอบบน PHP 4 เวอร์ชั่น ในเครื่องเดียวกัน
ผลการทดสอบจะเห็นว่า PHP5.2 มี Performance ต่ำที่สุด โดยห่างจาก PHP7 อยู่พอสมควร ในขณะที่ PHP ตั้งแต่ 5.4 ขึ้นมาแทบไม่มีการพัฒนาเลย และใน PHP5 ทั้งหมดที่ทดสอบ Array มี Performance ดีกว่า Object อยู่เล็กน้อย ซึ่งจะแตกต่างจาก PHP7 ซึ่ง Performance ของ Object ดีกว่าของ Array อยู่พอสมควรทีเดียว ทำให้ PHP7 นี่เหมาะกับการเขียนแบบ OOP ที่สุด
โค้ดที่ใช้ในการทดสอบ
แบบที่หนึ่ง การเข้าถึงข้อมูลประเภท Object
$x = $y->a;
แบบที่สอง การเข้าถึงข้อมูลประเภท Array
$x = $y['a'];
ผลการทดสอบบน PHP 4 เวอร์ชั่น ในเครื่องเดียวกัน
Current PHP version: 5.2.17
0.002082896232605 (object)
0.0015032887458801 (array)
Current PHP version: 5.4.45
0.00058697793960571 (object)
0.00055904720306396 (array)
Current PHP version: 5.6.14
0.00055110454559326 (object)
0.00051929950714111 (array)
Current PHP version: 7.1.0-dev
0.00032248497009277 (object)
0.00047236680984497 (array)
ผลการทดสอบจะเห็นว่า PHP5.2 มี Performance ต่ำที่สุด โดยห่างจาก PHP7 อยู่พอสมควร ในขณะที่ PHP ตั้งแต่ 5.4 ขึ้นมาแทบไม่มีการพัฒนาเลย และใน PHP5 ทั้งหมดที่ทดสอบ Array มี Performance ดีกว่า Object อยู่เล็กน้อย ซึ่งจะแตกต่างจาก PHP7 ซึ่ง Performance ของ Object ดีกว่าของ Array อยู่พอสมควรทีเดียว ทำให้ PHP7 นี่เหมาะกับการเขียนแบบ OOP ที่สุด
โค้ดที่ใช้ในการทดสอบ
// ตัวแปรสำหรับการทดสอบ
$array = array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
'e' => 5,
'f' => 6,
'g' => 7,
'h' => 8,
'i' => 9
);
class Test
{
public $a = 1;
public $b = 2;
public $c = 3;
public $d = 4;
public $e = 5;
public $f = 6;
public $g = 7;
public $h = 8;
public $i = 9;
}
// จำนวนครั้งการทดสอบ
$max = 1000;
// จำนวนรอบในการทดสอบ ผลการทดสอบเฉลี่ยจากค่านี้
$count = 20;
for ($m = 0; $m < $count; $m++) {
// test 1
$y = new Test;
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
$x = $y->a;
$x = $y->b;
$x = $y->c;
$x = $y->d;
$x = $y->e;
$x = $y->f;
$x = $y->g;
$x = $y->h;
$x = $y->i;
}
$n += microtime(true) - $start;
$y = null;
// test 2
$start = microtime(true);
for ($z = 0; $z < $max; $z++) {
$x = $array['a'];
$x = $array['b'];
$x = $array['c'];
$x = $array['d'];
$x = $array['e'];
$x = $array['f'];
$x = $array['g'];
$x = $array['h'];
$x = $array['i'];
}
$o += microtime(true) - $start;
sleep(1);
}
echo 'Current PHP version: '.phpversion().'<br><br>';
echo ($n / $count).' (object)<br>';
echo ($o / $count).' (array)<br>';