Trong magento 2, các lớp được khởi tạo bằng cách sử dụng một nhà máy quản lý đối tượng : \Magento\Framework\ObjectManager\Factory\Factory::create().
Cho đến nay rất nhiều. Nhưng có một cái gì đó mà tôi không hiểu ở đây.
Sau khi kiểm tra xem không có tham chiếu vòng tròn nào trong các đối số nên được truyền cho hàm tạo cho DI và sau khi các đối số được xác định, đây là ( $argscác đối số sẽ được truyền cho hàm tạo):
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);
}
Tại sao switchtuyên bố dài này ? Tại sao không sử dụng trực tiếp mã từ defaultchi nhánh?
Hoặc tại sao dừng lại caseở 8? Tại sao không phải là 5 hay 10 hay 127?
