Issues (26)

src/Archive/Member.php (3 issues)

1
<?php
2
3
/*
4
 * This file is part of Compressy.
5
 *
6
 * (c) Alchemy <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Gocobachi\Compressy\Archive;
13
14
use Gocobachi\Compressy\Adapter\AdapterInterface;
15
use Gocobachi\Compressy\Adapter\Resource\ResourceInterface;
16
17
/**
18
 * Represents a member of an archive.
19
 */
20
class Member implements MemberInterface
21
{
22
    /**
23
     * The location of the file
24
     *
25
     * @var string
26
     */
27
    private $location;
28
29
    /**
30
     * Tells whether the archive member is a directory or not
31
     *
32
     * @var bool
33
     */
34
    private $isDir;
35
36
    /**
37
     * The uncompressed size of the file
38
     *
39
     * @var int
40
     */
41
    private $size;
42
43
    /**
44
     * The last modified date of the file
45
     *
46
     * @var \DateTime
47
     */
48
    private $lastModifiedDate;
49
50
    /**
51
     * The resource to the actual archive
52
     *
53
     * @var string
54
     */
55
    private $resource;
56
57
    /**
58
     * An adapter
59
     *
60
     * @var AdapterInterface
61
     */
62
    private $adapter;
63
64
    /**
65
     * Constructor
66
     *
67
     * @param ResourceInterface $resource The path of the archive which contain the member
68
     * @param AdapterInterface $adapter The archive adapter interface
69
     * @param string $location The path of the archive member
70
     * @param int $fileSize The uncompressed file size
71
     * @param \DateTime $lastModifiedDate The last modified date of the member
72
     * @param bool $isDir Tells whether the member is a directory or not
73
     */
74
    public function __construct(
75
        ResourceInterface $resource,
76
        AdapterInterface $adapter,
77
        $location,
78
        $fileSize,
79
        \DateTime $lastModifiedDate,
80
        $isDir
81
    ) {
82
        $this->resource = $resource;
0 ignored issues
show
Documentation Bug introduced by
It seems like $resource of type Gocobachi\Compressy\Adap...ource\ResourceInterface is incompatible with the declared type string of property $resource.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
83
        $this->adapter = $adapter;
84
        $this->location = $location;
85
        $this->isDir = $isDir;
86
        $this->size = $fileSize;
87
        $this->lastModifiedDate = $lastModifiedDate;
88
    }
89
90
    /**
91
     * {@inheritdoc}
92
     */
93
    public function getLocation()
94
    {
95
        return $this->location;
96
    }
97
98
    /**
99
     * {@inheritdoc}
100
     */
101
    public function isDir()
102
    {
103
        return $this->isDir;
104
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109
    public function getLastModifiedDate()
110
    {
111
        return $this->lastModifiedDate;
112
    }
113
114
    /**
115
     * {@inheritdoc}
116
     */
117
    public function getSize()
118
    {
119
        return $this->size;
120
    }
121
122
    /**
123
     * {@inheritdoc}
124
     */
125
    public function __toString()
126
    {
127
        return $this->location;
128
    }
129
130
    /**
131
     * {@inheritdoc}
132
     */
133
    public function extract($to = null, $overwrite = false)
134
    {
135
        $this->adapter->extractMembers($this->resource, $this->location, $to, (bool) $overwrite);
0 ignored issues
show
$this->resource of type string is incompatible with the type Gocobachi\Compressy\Adap...ource\ResourceInterface expected by parameter $resource of Gocobachi\Compressy\Adap...rface::extractMembers(). ( Ignorable by Annotation )

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

135
        $this->adapter->extractMembers(/** @scrutinizer ignore-type */ $this->resource, $this->location, $to, (bool) $overwrite);
Loading history...
136
137
        return new \SplFileInfo(sprintf('%s/%s', rtrim(null === $to ? getcwd() : $to, '/'), ltrim($this->location, '/')));
138
    }
139
140
    /**
141
     * @inheritdoc
142
     * */
143
    public function getResource()
144
    {
145
        return $this->resource;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->resource returns the type string which is incompatible with the return type mandated by Gocobachi\Compressy\Arch...nterface::getResource() of Gocobachi\Compressy\Adap...ource\ResourceInterface.

In the issue above, the returned value is violating the contract defined by the mentioned interface.

Let's take a look at an example:

interface HasName {
    /** @return string */
    public function getName();
}

class Name {
    public $name;
}

class User implements HasName {
    /** @return string|Name */
    public function getName() {
        return new Name('foo'); // This is a violation of the ``HasName`` interface
                                // which only allows a string value to be returned.
    }
}
Loading history...
146
    }
147
}
148