ฉันคิดว่านี่เป็นคำถามที่ดีมากซึ่งเกี่ยวข้องกับวิธีที่ Magento โหลดคลาส
ไม่มีวิธีที่ดีในการแก้ไขโดยไม่ต้องเปลี่ยนไฟล์ Magento
ดังนั้นปัญหาหลักคือ lib / Varien / Autoload.php
public function autoload($class)
{
if ($this->_collectClasses) {
$this->_arrLoadedClasses[self::$_scope][] = $class;
}
if ($this->_isIncludePathDefined) {
$classFile = COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
} else {
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
}
$classFile.= '.php';
return include $classFile;
}
Varien_Autoload::autoload
- วิธีการนี้เท่านั้นที่สามารถโหลดชั้นเรียนที่ตาม "ลูกแพร์ตั้งชื่อ" Mage_Core_Model_Config
-
แต่ถ้ามีการใช้ namespaces จะมี$class
Mage\\Core\\Model\\Config
ดังนั้นเราสามารถเพิ่มอีกหนึ่งการตรวจสอบและแก้ไขปัญหาเนมสเปซ
public function autoload($class)
{
if ($this->_collectClasses) {
$this->_arrLoadedClasses[self::$_scope][] = $class;
}
if ($this->_isIncludePathDefined) {
$classFile = COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
} else if (strpos($class, "\\") !== false) {
$classFile = str_replace("\\", DIRECTORY_SEPARATOR, $class);
} else {
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
}
$classFile.= '.php';
return include $classFile;
}
ตอนนี้คุณสามารถใช้ไลบรารีที่ใช้เนมสเปซได้แล้ว
นอกจากนี้ที่นี่คุณจะได้พบกับรายการการเปลี่ยนแปลงรหัสเพื่อใช้ใน namespaces วีโอไอพี