Featured image of post ความแตกต่างระหว่างเมธอด register() และ boot() ใน ServiceProvider ของ Laravel คืออะไร และสามารถใช้ในสถานการณ์ใดได้บ้าง?

ความแตกต่างระหว่างเมธอด register() และ boot() ใน ServiceProvider ของ Laravel คืออะไร และสามารถใช้ในสถานการณ์ใดได้บ้าง?

ความแตกต่างระหว่างเมธอด register() และ boot() ใน ServiceProvider ของ Laravel คืออะไร และสามารถใช้ในสถานการณ์ใดได้บ้าง?

การเปรียบเทียบเมธอด register() และ boot()

ใน ServiceProvider ของ Laravel ความแตกต่างหลักระหว่างเมธอด register() และ boot() อยู่ที่ช่วงเวลาในการทำงานและวัตถุประสงค์

register() boot()
คำอธิบาย ใช้สำหรับผูกบริการ (bind services) เข้ากับ service container ใช้สำหรับการดำเนินการที่ต้องพึ่งพาบริการที่ลงทะเบียนไว้แล้ว
ช่วงเวลาดำเนินการ ดำเนินการก่อนที่ service providers ทั้งหมดจะถูกลงทะเบียน ดำเนินการหลังจากที่ service providers ทั้งหมดลงทะเบียนเสร็จสิ้นแล้ว
การใช้งานหลัก ลงทะเบียน bindings, singletons, services ฯลฯ ลงทะเบียน event listeners, routes, Blade directives ฯลฯ
ข้อควรระวัง ไม่ควรใช้บริการจาก service providers อื่น เนื่องจากอาจยังไม่ได้ลงทะเบียน สามารถใช้บริการจาก service providers อื่นได้อย่างปลอดภัย

ตัวอย่างสถานการณ์การใช้งาน

การใช้ register()

public function register()
{
 $this->app->bind('App\Contracts\SomeService', 'App\Services\SomeService');
}

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

การใช้ boot()

public function boot()
{
 \Event::listen('event.name', function ($data) {
 // จัดการกับเหตุการณ์
 });
}

ที่นี่ เราลงทะเบียน event listener ในเมธอด boot() เพื่อให้มั่นใจว่าการพึ่งพาที่จำเป็นทั้งหมดพร้อมใช้งานแล้ว

สรุป

เมธอด register() จะเน้นไปที่การผูกบริการ (binding) ในขณะที่เมธอด boot() ใช้สำหรับการดำเนินการที่ต้องพึ่งพาบริการอื่นๆ ที่ลงทะเบียนไว้แล้ว

เมื่อพัฒนาแอปพลิเคชัน Laravel การใช้สองเมธอดนี้อย่างถูกต้องจะช่วยปรับปรุงความสามารถในการบำรุงรักษาและความเสถียรของโค้ดได้

Reference

All rights reserved,未經允許不得隨意轉載
ถูกสร้างด้วย Hugo
ธีม Stack ออกแบบโดย Jimmy