मैगनेटो 2 में ऑब्जेक्ट मैनेजर फैक्ट्री का उपयोग करके कक्षाओं को तत्काल किया जाता है \Magento\Framework\ObjectManager\Factory\Factory::create():।
अब तक गू। लेकिन ऐसा कुछ है जो मुझे यहां समझ में नहीं आता है।
यह जांचने के बाद कि क्या डीआई के लिए कंस्ट्रक्टर को पारित किए जाने वाले तर्कों में कोई परिपत्र संदर्भ नहीं हैं और तर्क निर्धारित किए जाने के बाद यह है ( $argsवे तर्क हैं जो कंस्ट्रक्टर को पारित किए जाने चाहिए):
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शाखा से सीधे कोड का उपयोग क्यों नहीं करते ?
या case8 पर क्यों रोकते हैं ? 5 या 10 या 127 क्यों नहीं?
