สำหรับคนเขียน PHP คำสั่ง require_once(“vendor/autoload.php”); จะได้เห็นบ่อย ถ้าเรามีการดาวน์โหลดโค้ดของคนอื่นมาใช้ผ่านทาง composer install

เล่าย้อนความไปในอดีตสักหน่อย ในสมัยที่เราดาวน์โหลดโค้ดคนอื่นจากอินเตอร์เน็ตมาใช้งาน เราจะใช้คำสั่ง include หรือ require ชี้เข้าไปหาไฟล์ที่เราไปโหลดมา ตรงๆ

พอเวลาผ่านไปๆ มีคนบอกว่า วิธีการที่ทำกันอยู่ในอดีตนั้นมันมั่วตั้ว เพราะว่า สมมตินะ เราไปดาวน์โหลดคลาสมาตัวหนึ่งซึ่งในคลาสนั้นมีการไปเรียกใช้คลาสที่เขาแจกๆกันเข้ามาด้วยอีกคลาสหนึ่ง แล้วเราก็ไปดาวน์โหลดคลาสที่สองมาใช้งานซึ่งในคลาสนั้นก็ไปเรียกคลาสเดียวกันกับที่คลาสตัวแรกเรียก มันทำให้มีการเรียกซ้ำถึงสองครั้ง และโค้ดที่ดาวน์โหลดมาก็เยอะโดยใช่เหตุ

ใช้คลาสร่วมกัน มันก็ควรจะโหลดมาแค่ครั้งเดียวแล้วแชร์กัน ทั่วโลก

แต่คำถามก็คือ หลักการมันดี แต่ทำอย่างไรล่ะ

เขาก็เลยให้กำเนิด composer ขึ้นมา การสร้างคลาสเพื่อให้ซัพพอร์ต composer เขาก็มีหลักการของเขา ซึ่งนักพัฒนาคลาสแจก เขาจะพยายามทำตาม เขาจะบอกในคลาสเขาว่า เขามี dependency กับคลาสอะไร

ทีนี้พอเมื่อสองคลาส มี dependency ตัวเดียวกัน composer ก็จะช่วยจัดการให้โดยโหลดมาแค่ตัวเดียว

ทีนี้ในหลักการของ composer นั้น เขาจะสร้างไฟล์ autoload.php ขึ้นมาให้ตัวหนึ่ง เพื่อให้เราไว้สำหรับ include หรือ require เข้าไปในโค้ด PHP ของเรา มันจะเป็นการเข้าถึงคลาสทุกตัวที่ติดตั้งผ่าน composer

ถ้าเราดาวน์โหลดคลาส LINEBOT ผ่านทาง composer เวลาเรียกใช้งาน แทนที่เราจะชี้เข้าไปหาไฟล์ LINEBOT โดยตรง เราไม่ทำอย่างนั้น เราจะใช้คำสั่ง require_once(“vendor/autoload.php”); แทน ภายภาคหน้าเมื่อเราติดตั้งคลาสอื่นๆเพิ่มเติม เราก็ไม่ต้องมาเขียนคำสั่ง require_once เพิ่มเติม เพราะ composer มันช่วยจัดการให้แล้วโดยการเข้าไปเพิ่มโค้ดในไฟล์ autoload.php อัตโนมัติ

ครับ อันนี้เป็นที่มาที่ไปของคำถามหัวข้อว่า ทำไมต้องใส่ require_once(“vendor/autoload.php”); คะ