Issues (6)

src/Proxy/ProxyDI.php (3 issues)

1
<?php
2
3
namespace Anax\Proxy;
4
5
use Anax\DI\Exception\NotFoundException;
6
use Psr\Container\ContainerInterface;
7
8
/**
9
 * Base class and template for Proxy\DI classes. Each $di service will be
10
 * represented by an subclass of this class. This class is the base and the
11
 * target base class is created with the autoloader of ProxyDIFactory. The
12
 * target class holds the name of the $di service it connects to, below the
13
 * namespace Anax\Proxy\DI\Service. As an example the $di->get("request")
14
 * could be represented as Anax\Proxy\DI\Request.
15
 */
16
class ProxyDI
17
{
18
    /**
19
     * @var object $di  The service container.
20
     */
21
    private static $di = null;
22
23
24
25
    /**
26
     * Inject $di and make it accessable for static proxy access.
27
     *
28
     * @param Psr\Container\ContainerInterface $di The service container
0 ignored issues
show
The type Anax\Proxy\Psr\Container\ContainerInterface was not found. Did you mean Psr\Container\ContainerInterface? If so, make sure to prefix the type with \.
Loading history...
29
     *                                             holding framework
30
     *                                             services.
31
     *
32
     * @return void.
0 ignored issues
show
Documentation Bug introduced by
The doc comment void. at position 0 could not be parsed: Unknown type name 'void.' at position 0 in void..
Loading history...
33
     */
34 4
    public static function setDI(ContainerInterface $di) : void
35
    {
36 4
        self::$di = $di;
37 4
    }
38
39
40
41
    /**
42
     * Catch all calls to static methods and forward them as actual
43
     * calls to the $di container.
44
     *
45
     * @param string $name       The name of the static method called.
46
     * @param array  $arguments  The arguments sent to the method.
47
     *
48
     * @throws ProxyException when failing to forward the call to the
49
     *                        method in the $di service.
50
     *
51
     * @return mixed
52
     */
53 3
    public static function __callStatic($name, $arguments)
54
    {
55
        try {
56 3
            $serviceName = static::getServiceName();
0 ignored issues
show
The method getServiceName() does not exist on Anax\Proxy\ProxyDI. Since you implemented __callStatic, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

56
            /** @scrutinizer ignore-call */ 
57
            $serviceName = static::getServiceName();
Loading history...
57 3
            $serviceObject = self::$di->get($serviceName);
58 1
        } catch (NotFoundException $e) {
59 1
            throw new ProxyException("The Proxy is trying to reach service '$serviceName' but it is not loaded as a service in \$di.");
60
        }
61
62 2
        if (!is_callable([$serviceObject, $name])) {
63 1
            throw new ProxyException("The Proxy is trying to call method '$name' on service '$serviceName' but that method is not callable.");
64
        }
65
66 1
        return call_user_func_array([$serviceObject, $name], $arguments);
67
    }
68
}
69