ในวีโอไอพี 2 \Magento\Framework\ObjectManager\Factory\Factory::create()
ชั้นเรียนที่มีการใช้อินสแตนซ์โรงงานผู้จัดการวัตถุ:
จนถึงตอนนี้สารที่หนา แต่มีบางอย่างที่ฉันไม่เข้าใจที่นี่
หลังจากตรวจสอบว่าไม่มีการอ้างอิงแบบวงกลมในอาร์กิวเมนต์ที่ควรถูกส่งผ่านไปยัง Constructor สำหรับ DI และหลังจากที่อาร์กิวเมนต์ถูกกำหนดแล้วจะมีสิ่งนี้ ( $args
เป็นอาร์กิวเมนต์ที่ควรถูกส่งผ่านไปยัง Constructor):
switch (count($args)) {
case 1:
return new $type($args[0]);
case 2:
return new $type($args[0], $args[1]);
case 3:
return new $type($args[0], $args[1], $args[2]);
case 4:
return new $type($args[0], $args[1], $args[2], $args[3]);
case 5:
return new $type($args[0], $args[1], $args[2], $args[3], $args[4]);
case 6:
return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
case 7:
return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
case 8:
return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
default:
$reflection = new \ReflectionClass($type);
return $reflection->newInstanceArgs($args);
}
ทำไมถึงเป็นเช่นนี้มานานแล้วswitch
คำสั่ง? ทำไมไม่ใช้รหัสโดยตรงจากdefault
สาขา?
หรือหยุดcase
ที่ 8 ทำไม ทำไมไม่ใช่ 5 หรือ 10 หรือ 127