188   PHP โค้ดที่ไม่ควรใช้เป็นแหล่งอ้างอิงเพื่อการเรียนรู้

>> รู้หมือไร่ <<

ข้อสังเกตในการตัดสินโค้ดที่ไม่ควรใช้เป็นแหล่งอ้างอิงเพื่อการเรียนรู้ (ฉบับปรับปรุง)

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)

Back to Top