Code Duplication    Length = 19-23 lines in 2 locations

lib/DependencyInjector.php 2 locations

@@ 68-86 (lines=19) @@
65
     * @param $methodName
66
     * @return mixed The method's return value
67
     */
68
    public function injectIntoMethod( $object, $methodName = "injectDependencies" ){
69
        $ref = new \ReflectionClass($object);
70
        try{
71
            $refMethod = $ref->getMethod( $methodName );
72
        }catch( ReflectionException  $e ){
73
            return null;
74
        }
75
        
76
        $toInject = [];
77
        foreach ($refMethod->getParameters() as $p) {
78
            $className = $p->getClass()->name;
79
            if( $className === "Pimple\\Container" ){
80
                $toInject[] = $this->container;
81
            }else{
82
                $toInject[] = $this->container[ $className ];
83
            }
84
        }
85
        return $refMethod->invoke( $object, ... $toInject );
86
    }
87
88
    /**
89
     * Inject dependencies from, or including, the Pimple container, into a a given class's constructor
@@ 96-118 (lines=23) @@
93
     * @param array $toInject
94
     * @return bool Whether the method was found
95
     */
96
    public function injectIntoConstructor( $classToBuildName, array $toInject=[] ){
97
        $ref = new \ReflectionClass($classToBuildName);
98
        try{
99
            $constr = $ref->getConstructor();
100
        }catch( ReflectionException  $e ){
101
            return null;
102
        }
103
104
        $numToSkip = count($toInject);
105
        foreach ($constr->getParameters() as $p) {
106
            if( $numToSkip > 0 ){
107
                $numToSkip--;
108
                continue;
109
            }
110
            $classToInjectName = $p->getClass()->name;
111
            if( $classToInjectName === "Pimple\\Container" ){
112
                $toInject[] = $this->container;
113
            }else{
114
                $toInject[] = $this->container[ $classToInjectName ];
115
            }
116
        }
117
        return new $classToBuildName( ... $toInject );
118
    }
119
120
}
121