ปัญหานี้โดยปกติแล้ว 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 แล้วก็ตาม ทางที่ดีคือเขียนให้ถูกหลักเกณฑ์ที่เขากำหนดไว้ดีที่สุดครับ