รักสามเศร้า (BASE)Loader, (APP)Loader และ MY_Loader

รักสามเศร้าในไฟล์ /system/codeigniter/Common.php

ในฟังก์ชัน load_class ตรงส่วนที่เป็นการตัดสินใจว่าจะดึง library จากใน BASEPATH หรือ APPPATH มีโค๊ดตามนี้

if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT))
{
    require(BASEPATH.'libraries/'.$class.EXT);
    require(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT);
    $is_subclass = TRUE;
}
else
{
    if (file_exists(APPPATH.'libraries/'.$class.EXT))
    {
        require(APPPATH.'libraries/'.$class.EXT);
        $is_subclass = FALSE;
    }
    else
    {
        require(BASEPATH.'libraries/'.$class.EXT);
        $is_subclass = FALSE;
    }
}

จะเห็นว่าถ้ามี MY_Loader.php อยู่ใน /system/application/libraries/ ก็จะเข้าที่เงื่อนไขแรกเลย. ซึ่งมันจะโหลด Loader.php ซึ่งอยู่ใน /system/libraries/ โดยไม่สนว่าจะมี Loader.php อยู่ใน /system/application/libraries/ หรือไม่ ทั้งๆ ที่จริงๆ แล้วควรให้ความสำคัญกับ Loader ที่อยู่ใน APPPATH ก่อน BASEPATH. ตรงนี้ผมก็ไม่แน่ใจเหมือนกันว่าจุดประสงค์ที่แท้จริงของเงื่อนไขนี้คืออะไร แต่มันไม่ตรงกับความต้องการของผม ก็เลยต้องจัดการปรับเปลี่ยนเล็กน้อย เป็นแบบนี้แทนครับ

if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT))
{
    if (file_exists(APPPATH.'libraries/'.$class.EXT))
        require(APPPATH.'libraries/'.$class.EXT);
    else
        require(BASEPATH.'libraries/'.$class.EXT);
    require(BASEPATH.'libraries/'.$class.EXT);
    require(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT);
    $is_subclass = TRUE;
}
else
{
    if (file_exists(APPPATH.'libraries/'.$class.EXT))
    {
        require(APPPATH.'libraries/'.$class.EXT);
        $is_subclass = FALSE;
    }
    else
    {
        require(BASEPATH.'libraries/'.$class.EXT);
        $is_subclass = FALSE;
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *