1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- namespace Core;
- class Ioc {
-
- public static function getInstance($className) {
- $paramArr = self::getMethodParams($className);
- return (new \ReflectionClass($className))->newInstanceArgs($paramArr);
- }
-
- public static function make($className, $methodName, $params = []) {
-
- $instance = self::getInstance($className);
-
- $paramArr = self::getMethodParams($className, $methodName);
- return $instance->{$methodName}(...array_merge($paramArr, $params));
- }
-
- protected static function getMethodParams($className, $methodsName = '__construct') {
-
- $class = new \ReflectionClass($className);
- $paramArr = [];
-
- if ($class->hasMethod($methodsName)) {
-
- $construct = $class->getMethod($methodsName);
-
- $params = $construct->getParameters();
- if (count($params) > 0) {
-
- foreach ($params as $key => $param) {
- if ($paramClass = $param->getClass()) {
-
- $paramClassName = $paramClass->getName();
-
- $args = self::getMethodParams($paramClassName);
- $paramArr[] = (new \ReflectionClass($paramClass->getName()))->newInstanceArgs($args);
- }
- }
- }
- }
- return $paramArr;
- }
- }
|