>> รู้หมือไร่ <<
ข้อสังเกตในการตัดสินโค้ดที่ไม่ควรใช้เป็นแหล่งอ้างอิงเพื่อการเรียนรู้ (ฉบับปรับปรุง)
1. ใช้ <? เป็น tag เปิด แทนที่จะใช้ <?php (แต่ <?= ที่ใช้ในการ echo นั้นถือว่าโอเค)
เพราะว่ารูปแบบ <? นั้นอาจจะใช้ไม่ได้หาก PHP ไม่ได้เปิดการตั้งค่า short_open_tag ใน php.ini
ในขณะที่ <?php นั้นใช้ได้ตลอด ดังนั้นมันไม่ดีแน่หากโปรแกรมคุณต้องขึ้นอยู่กับ config ของ PHP ถึงจะทำงานได้
และเขาก็รณรงค์กันมานานแล้ว (นานกว่าทุกข้อในบทความนี้) ว่าควรใช้ <?php แทน <?
ดังนั้นถ้าเจอโค้ดที่ยังใช้ <? ให้ฟันธงได้เลยว่าเป็นโค้ดที่เก่ามากแน่ๆ
2. มีการใช้ฟังก์ชั่น
session_register(), session_unregister()
ซึ่งเป็นฟังก์ชั่นเก่าเก็บตั้งแต่สมัย PHP4 ก่อนที่จะมีตัวแปร
$_SESSION
ซึ่งทั้งสองถูกยกเลิกใน PHP5.4
3. มีการใช้ตัวแปรประเภท
$HTTP_XXX_VARS ($HTTP_POST_VARS, $HTTP_SERVER_VARS)
หรือ
$HTTP_RAW_POST_DATA
ซึ่งเป็นตัวแปรเก่าเก็บตั้งแต่สมัย PHP4 เช่นกัน
ก่อนที่จะมี
$_GET, $_POST, $_REQUEST
ซึ่งทั้งหมดถูกยกเลิกใน PHP5.4 เช่นกัน
4. มีการใช้ฟังก์ชั่น
get_browser()
ซึ่งฟังก์ชั่นนี้แต่ก่อนมีไว้เพื่อตรวจว่าผู้ใช้ใช้ browser อะไร
และมีความสามารถอะไรบ้าง เป็นเทคนิคที่เรียกว่า Browser Sniffing ซึ่งเป็นที่นิยมกันในยุคแรกๆ ของ
World Wide Web แต่ในปัจจุบันเทคนิคนี้ถือว่าเป็น anti-pattern ที่ web developer เห็นพ้องต้องกันว่าไม่ควรใช้
https://en.wikipedia.org/wiki/Browser_sniffing
5. มีการใช้ฟังก์ชั่นที่ชื่อขึ้นต้นด้วย ereg_ หรือ POSIX Extended Regular Expression ซึ่งเป็นฟังก์ชั่นเก่าเก็บ
ถูกขึ้นบัญชีว่าไม่ควรใช้ (Deprecated) ตั้งแต่ PHP5.3 และถูกเอาออกไปแล้วใน PHP7 ซึ่งหากต้องการ
ความสามารถในเรื่อง Regular Expression ให้นึกถึง PCRE
หรือ Perl Compatible Regular Expression (ฟังก์ชั่นที่ชื่อขึ้นต้นด้วย preg_)
6. ยังใช้ฟังก์ชั่น mysql_xxxxx() อยู่เช่น
mysql_connect(), mysql_query()
เพราะฟังก์ชั่นเหล่านี้เก่ามากๆ และไม่มีการอัพเดทมานานมากๆ
และโค้ดที่ใช้ฟังก์ชั่นเหล่านี้ จะไม่สามารถทำงานได้เลยใน PHP7 เพราะถูกยกเลิกไปแล้ว
ซึ่งควรใช้ extension MySQLi หรือ PDO แทน
7. ใช้ extension Mcrypt เพราะ extension นี้เก่ามาก ไม่มีการอัพเดทมานานแล้ว
ซึ่งตอนนี้มีสถานะเป็น deprecated และจะถูกยกเลิกในอนาคต
https://paragonie.com/blog/2015/05/if-you-re-typing-word-mcrypt-into-your-code-you-re-doing-it-wrong
ซึ่งควรใช้ extension OpenSSL แทน
8. เข้าถึงตัวแปรโดยไม่มีการตรวจสอบด้วย
isset() or empty()
ซึ่ง ณ จุดที่เข้าถึงตัวแปรเหล่านั้น ไม่สามารถแน่ใจได้ว่าตัวแปรนั้นมีค่าอยู่แล้วหรือไม่
ซึ่งเรามักจะพบเห็นบ่อยๆ ในโค้ดที่เข้าถึงตัวแปรจากผู้ใช้เช่น
$_GET, $_POST
เช่น
if ($_GET['id']) {
...
แบบนี้ชัดเจนว่าไม่ดีแน่ๆ
9. ใช้ var เพื่อกำหนด property ใน class
เช่น
class ABC
{
var $a;
}
ซึ่ง var เป็น syntax สมัย PHP4 ก่อนที่จะมี visibility ใน PHP5 และไม่แนะนำให้ใช้ตั้งแต่ PHP5 เป็นต้นมา
ดังนั้นถ้าเจอ var ก็บอกโค้ดนั้นๆ ได้เลย
10. ใช้ชื่อ method ชื่อเดียวกันกับ class เพื่อเป็น constructor
เช่น
class ABC
{
function ABC()
{
// Initialize this instance
}
}
เช่นเดียวกับ var การเขียนลักษณะนี้เป็นแบบเก่าที่ใช้กันในสมัย PHP4
แต่พอใน PHP5 เปลี่ยนมาใช้ __construct() แทนและจะเกิด E_DEPRECATED หากใช้รูปแบบเก่า
และคาดว่าการเขียนรูปแบบนี้ จะถูกยกเลิกอย่างสมบูรณ์ใน PHP8
https://wiki.php.net/rfc/remove_php4_constructors
----------
หากคุณพบเจอโค้ดที่ใช้การเขียนดังที่กล่าวมา เป็นไปได้ว่าเป็นโค้ดที่เก่ามาก
หรือเขียนโดยโปรแกรมเมอร์ที่ขาดประสบการณ์
ซึ่งไม่ควรจะใช้เป็นแหล่งอ้างอิงและเรียนรู้ด้วยประการทั้งปวง
Credit: Admin (phpinfo.in.th)