Completed
Push — master ( fac124...ff4c77 )
by Márk
10s
created

CommonClassesStrategy::getCandidates()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 8
rs 9.4285
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
3
namespace Http\Discovery\Strategy;
4
5
use GuzzleHttp\Psr7\Request as GuzzleRequest;
6
use Http\Message\MessageFactory\GuzzleMessageFactory;
7
use Http\Message\StreamFactory\GuzzleStreamFactory;
8
use Http\Message\UriFactory\GuzzleUriFactory;
9
use Http\Message\MessageFactory\DiactorosMessageFactory;
10
use Http\Message\StreamFactory\DiactorosStreamFactory;
11
use Http\Message\UriFactory\DiactorosUriFactory;
12
use Zend\Diactoros\Request as DiactorosRequest;
13
use Http\Adapter\Guzzle6\Client as Guzzle6;
14
use Http\Adapter\Guzzle5\Client as Guzzle5;
15
use Http\Client\Curl\Client as Curl;
16
use Http\Client\Socket\Client as Socket;
17
use Http\Adapter\React\Client as React;
18
use Http\Adapter\Buzz\Client as Buzz;
19
20
/**
21
 * @author Tobias Nyholm <[email protected]>
22
 */
23
class CommonClassesStrategy implements DiscoveryStrategy
24
{
25
    /**
26
     * @var array
27
     */
28
    private static $classes = [
29
        'Http\Message\MessageFactory' => [
30
            ['class' => GuzzleMessageFactory::class, 'condition' => [GuzzleRequest::class, GuzzleMessageFactory::class]],
31
            ['class' => DiactorosMessageFactory::class, 'condition' => [DiactorosRequest::class, DiactorosMessageFactory::class]],
32
        ],
33
        'Http\Message\StreamFactory' => [
34
            ['class' => GuzzleStreamFactory::class, 'condition' => [GuzzleRequest::class, GuzzleStreamFactory::class]],
35
            ['class' => DiactorosStreamFactory::class, 'condition' => [DiactorosRequest::class, DiactorosStreamFactory::class]],
36
        ],
37
        'Http\Message\UriFactory' => [
38
            ['class' => GuzzleUriFactory::class, 'condition' => [GuzzleRequest::class, GuzzleUriFactory::class]],
39
            ['class' => DiactorosUriFactory::class, 'condition' => [DiactorosRequest::class, DiactorosUriFactory::class]],
40
        ],
41
        'Http\Client\HttpAsyncClient' => [
42
            ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
43
            ['class' => Curl::class, 'condition' => Curl::class],
44
            ['class' => React::class, 'condition' => React::class],
45
        ],
46
        'Http\Client\HttpClient' => [
47
            ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
48
            ['class' => Guzzle5::class, 'condition' => Guzzle5::class],
49
            ['class' => Curl::class, 'condition' => Curl::class],
50
            ['class' => Socket::class, 'condition' => Socket::class],
51
            ['class' => Buzz::class, 'condition' => Buzz::class],
52
            ['class' => React::class, 'condition' => React::class],
53
        ],
54
    ];
55
56
    /**
57
     * {@inheritdoc}
58
     */
59
    public static function getCandidates($type)
60
    {
61
        if (isset(static::$classes[$type])) {
0 ignored issues
show
Bug introduced by
Since $classes is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $classes to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
62
            return static::$classes[$type];
0 ignored issues
show
Bug introduced by
Since $classes is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $classes to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
63
        }
64
65
        return [];
66
    }
67
}
68