ปัญหานี้โดยปกติแล้ว PHP ต่ำกว่า 5.3 จะไม่เจอนะครับ มันจะมาเจอตอนหลัง เนื่องจากมัน strict หรือพูดเป็นภาษาบ้านๆว่า มัน “เข้มงวด” กับการกำหนดค่าตัวแปร และการเรียกใช้งาน function ซึ่งโดยมากจะเกิดกับโค๊ดในลักษณะนี้ครับ
<?php
$name = '201406171524485d53.jpg';
$extension = end(explode('.', $name));
echo $extension;
?>
วิธีแก้ไขคือ ให้แยกเอา explode กับ end ออกจากกันครับ แบบตัวอย่างนี้
<?php
$name = '201406171524485d53.jpg';
$ext = explode('.', $name);
$extension = end($ext);
echo $extension;
?>
ซึ่งถ้าลองดูรายละเอียดของ function explode() จะพบว่าค่าที่คืนกลับมาเป็น array เช่นเดียวกับ function split() ที่ถูกถอดออกใน PHP 5.3
Description
$delimiter , string $string [, int $limit ] )string formed by splitting it on boundaries formed by the string delimiter.Description
$pattern , string $string [, int $limit = -1 ] )string into array by regular expression.ซึ่ง การใช้ function end() จำเป็นต้องเป็นตัวแปรแบบ Array เท่านั้น เพราะมันมีการระบุ pointer ตัวสุดท้ายของ Array สาเหตุที่แจ้ง error แบบนี้เพราะมันไม่ตรวจสอบค่าที่อยู่ใน function end() แต่ถ้าพบว่าไม่ใช่ Array มันจะแจ้งออกมาทันที แม้ว่าเราจะมีการ return ค่าออกมาเป็น Array แล้วก็ตาม ทางที่ดีคือเขียนให้ถูกหลักเกณฑ์ที่เขากำหนดไว้ดีที่สุดครับ