Completed
Push — master ( 8e28ab...2236d8 )
by Taosikai
15:04
created

ShippingZone::getCarrierShippingRateProviders()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the slince/shopify-api-php
5
 *
6
 * (c) Taosikai <[email protected]>
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace Slince\Shopify\Manager\ShippingZone;
13
14
use Slince\Shopify\Manager\Country\Country;
15
use Slince\Shopify\Common\Model\Model;
16
use Slince\Shopify\Hydrator\Association\HasMany;
17
use Slince\Shopify\Manager\Province\Province;
18
19
class ShippingZone extends Model
20
{
21
    /**
22
     * @var string
23
     */
24
    protected $name;
25
26
    /**
27
     * @var Country[]
28
     */
29
    protected $countries;
30
31
    /**
32
     * @var Province[]
33
     */
34
    protected $provinces;
35
36
    /**
37
     * @var array
38
     */
39
    protected $carrierShippingRateProviders;
40
41
    /**
42
     * @var array
43
     */
44
    protected $priceBasedShippingRates;
45
46
    /**
47
     * @var array
48
     */
49
    protected $weightBasedShippingRates;
50
51
    /**
52
     * @return string
53
     */
54
    public function getName()
55
    {
56
        return $this->name;
57
    }
58
59
    /**
60
     * @param string $name
61
     *
62
     * @return ShippingZone
63
     */
64
    public function setName($name)
65
    {
66
        $this->name = $name;
67
68
        return $this;
69
    }
70
71
    /**
72
     * @return Country[]
73
     */
74
    public function getCountries()
75
    {
76
        return $this->countries;
77
    }
78
79
    /**
80
     * @param Country[] $countries
81
     *
82
     * @return ShippingZone
83
     */
84
    public function setCountries($countries)
85
    {
86
        $this->countries = $countries;
87
88
        return $this;
89
    }
90
91
    /**
92
     * @return Province[]
93
     */
94
    public function getProvinces()
95
    {
96
        return $this->provinces;
97
    }
98
99
    /**
100
     * @param Province[] $provinces
101
     *
102
     * @return ShippingZone
103
     */
104
    public function setProvinces($provinces)
105
    {
106
        $this->provinces = $provinces;
107
108
        return $this;
109
    }
110
111
    /**
112
     * @return array
113
     */
114
    public function getCarrierShippingRateProviders()
115
    {
116
        return $this->carrierShippingRateProviders;
117
    }
118
119
    /**
120
     * @param array $carrierShippingRateProviders
121
     *
122
     * @return ShippingZone
123
     */
124
    public function setCarrierShippingRateProviders($carrierShippingRateProviders)
125
    {
126
        $this->carrierShippingRateProviders = $carrierShippingRateProviders;
127
128
        return $this;
129
    }
130
131
    /**
132
     * @return array
133
     */
134
    public function getPriceBasedShippingRates()
135
    {
136
        return $this->priceBasedShippingRates;
137
    }
138
139
    /**
140
     * @param array $priceBasedShippingRates
141
     *
142
     * @return ShippingZone
143
     */
144
    public function setPriceBasedShippingRates($priceBasedShippingRates)
145
    {
146
        $this->priceBasedShippingRates = $priceBasedShippingRates;
147
148
        return $this;
149
    }
150
151
    /**
152
     * @return array
153
     */
154
    public function getWeightBasedShippingRates()
155
    {
156
        return $this->weightBasedShippingRates;
157
    }
158
159
    /**
160
     * @param array $weightBasedShippingRates
161
     *
162
     * @return ShippingZone
163
     */
164
    public function setWeightBasedShippingRates($weightBasedShippingRates)
165
    {
166
        $this->weightBasedShippingRates = $weightBasedShippingRates;
167
168
        return $this;
169
    }
170
171
    /**
172
     * {@inheritdoc}
173
     */
174
    public static function getTypeCollection()
175
    {
176
        return array_merge(parent::getTypeCollection(), [
0 ignored issues
show
Best Practice introduced by
The expression return array_merge(paren...nce\Province::class))); seems to be an array, but some of its elements' types (Slince\Shopify\Hydrator\Association\HasMany) are incompatible with the return type of the parent method Slince\Shopify\Common\Mo...odel::getTypeCollection of type Slince\Shopify\Hydrator\Type\DateTimeType[].

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
177
            new HasMany('countries', Country::class),
178
            new HasMany('provinces', Province::class),
179
        ]);
180
    }
181
}