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à ( $args
cá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 switch
tuyên bố dài này ? Tại sao không sử dụng trực tiếp mã từ default
chi 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?