mock_class = $mock_class; $rc = new ReflectionClass( $mock_class ); $static_methods = $rc->getMethods( ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_STATIC ); $this->mocked_methods = array_map( function( $item ) { return $item->getName(); }, $static_methods ); } public function hack( $code, $path ) { $tokens = $this->tokenize( $code ); $code = ''; $previous_token_is_object_operator = false; foreach ( $tokens as $token ) { if ( $this->is_token_of_type( $token, T_STRING ) && ! $previous_token_is_object_operator && in_array( $token[1], $this->mocked_methods ) ) { $code .= "{$this->mock_class}::{$token[1]}"; } else { $code .= $this->token_to_string( $token ); $previous_token_is_object_operator = $this->is_token_of_type( $token, T_DOUBLE_COLON ) || $this->is_token_of_type( $token, T_OBJECT_OPERATOR ); } } return $code; } }