ปัญหานี้โดยปกติแล้ว 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
explode
(PHP 4, PHP 5)
explode — Split a string by string
Description
array explode ( string $delimiter
, string $string
[, int $limit
] )
split
(PHP 4, PHP 5)
split — Split string into array by regular expression
Description
array split ( string $pattern
, string $string
[, int $limit
= -1 ] )
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
ซึ่ง การใช้ function end() จำเป็นต้องเป็นตัวแปรแบบ Array เท่านั้น เพราะมันมีการระบุ pointer ตัวสุดท้ายของ Array สาเหตุที่แจ้ง error แบบนี้เพราะมันไม่ตรวจสอบค่าที่อยู่ใน function end() แต่ถ้าพบว่าไม่ใช่ Array มันจะแจ้งออกมาทันที แม้ว่าเราจะมีการ return ค่าออกมาเป็น Array แล้วก็ตาม ทางที่ดีคือเขียนให้ถูกหลักเกณฑ์ที่เขากำหนดไว้ดีที่สุดครับ
ป้ายกำกับ: array, coding, debug, end, explode, php, split, strict
string
formed by splitting it on boundaries formed by the stringdelimiter
.