Complex classes like StatementList often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use StatementList, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
31 | class StatementList implements IteratorAggregate, Comparable, Countable { |
||
32 | |||
33 | /** |
||
34 | * @var Statement[] |
||
35 | */ |
||
36 | private $statements = []; |
||
37 | |||
38 | /** |
||
39 | * @param Statement[]|Traversable|Statement $statements |
||
40 | * @param Statement [$statement2,...] |
||
41 | * |
||
42 | * @throws InvalidArgumentException |
||
43 | */ |
||
44 | public function __construct( $statements = [] /*...*/ ) { |
||
61 | |||
62 | /** |
||
63 | * Returns the property ids used by the statements. |
||
64 | * The keys of the returned array hold the serializations of the property ids. |
||
65 | * |
||
66 | * @return PropertyId[] Array indexed by property id serialization. |
||
67 | */ |
||
68 | public function getPropertyIds() { |
||
77 | |||
78 | /** |
||
79 | * @since 1.0, setting an index is supported since 6.1 |
||
80 | * @see ReferenceList::addReference |
||
81 | * |
||
82 | * @param Statement $statement |
||
83 | * @param int|null $index New position of the added statement, or null to append. |
||
84 | * |
||
85 | * @throws InvalidArgumentException |
||
86 | */ |
||
87 | public function addStatement( Statement $statement, $index = null ) { |
||
96 | |||
97 | /** |
||
98 | * @param Snak $mainSnak |
||
99 | * @param Snak[]|SnakList|null $qualifiers |
||
100 | * @param Reference[]|ReferenceList|null $references |
||
101 | * @param string|null $guid |
||
102 | */ |
||
103 | public function addNewStatement( Snak $mainSnak, $qualifiers = null, $references = null, $guid = null ) { |
||
112 | |||
113 | /** |
||
114 | * @since 3.0 |
||
115 | * |
||
116 | * @param string|null $guid |
||
117 | */ |
||
118 | public function removeStatementsWithGuid( $guid ) { |
||
127 | |||
128 | /** |
||
129 | * Statements that have a main snak already in the list are filtered out. |
||
130 | * The last occurrences are retained. |
||
131 | * |
||
132 | * @since 1.0 |
||
133 | * |
||
134 | * @return self |
||
135 | */ |
||
136 | public function getWithUniqueMainSnaks() { |
||
145 | |||
146 | /** |
||
147 | * @since 3.0 |
||
148 | * |
||
149 | * @param PropertyId $id |
||
150 | * |
||
151 | * @return self |
||
152 | */ |
||
153 | public function getByPropertyId( PropertyId $id ) { |
||
164 | |||
165 | /** |
||
166 | * @since 3.0 |
||
167 | * |
||
168 | * @param int|int[] $acceptableRanks |
||
169 | * |
||
170 | * @return self |
||
171 | */ |
||
172 | public function getByRank( $acceptableRanks ) { |
||
184 | |||
185 | /** |
||
186 | * Returns the so called "best statements". |
||
187 | * If there are preferred statements, then this is all the preferred statements. |
||
188 | * If there are no preferred statements, then this is all normal statements. |
||
189 | * |
||
190 | * @since 2.4 |
||
191 | * |
||
192 | * @return self |
||
193 | */ |
||
194 | public function getBestStatements() { |
||
203 | |||
204 | /** |
||
205 | * Returns a list of all Snaks on this StatementList. This includes at least the main snaks of |
||
206 | * all statements, the snaks from qualifiers, and the snaks from references. |
||
207 | * |
||
208 | * This is a convenience method for use in code that needs to operate on all snaks, e.g. |
||
209 | * to find all referenced Entities. |
||
210 | * |
||
211 | * @since 1.1 |
||
212 | * |
||
213 | * @return Snak[] Numerically indexed (non-sparse) array. |
||
214 | */ |
||
215 | public function getAllSnaks() { |
||
226 | |||
227 | /** |
||
228 | * @since 2.3 |
||
229 | * |
||
230 | * @return Snak[] Numerically indexed (non-sparse) array. |
||
231 | */ |
||
232 | public function getMainSnaks() { |
||
241 | |||
242 | /** |
||
243 | * @return Traversable|Statement[] |
||
244 | */ |
||
245 | public function getIterator() { |
||
248 | |||
249 | /** |
||
250 | * @return Statement[] Numerically indexed (non-sparse) array. |
||
251 | */ |
||
252 | public function toArray() { |
||
255 | |||
256 | /** |
||
257 | * @see Countable::count |
||
258 | * |
||
259 | * @return int |
||
260 | */ |
||
261 | public function count() { |
||
264 | |||
265 | /** |
||
266 | * @see Comparable::equals |
||
267 | * |
||
268 | * @param mixed $target |
||
269 | * |
||
270 | * @return bool |
||
271 | */ |
||
272 | public function equals( $target ) { |
||
285 | |||
286 | private function statementsEqual( array $statements ) { |
||
299 | |||
300 | /** |
||
301 | * @return bool |
||
302 | */ |
||
303 | public function isEmpty() { |
||
306 | |||
307 | /** |
||
308 | * @since 3.0 |
||
309 | * @see StatementByGuidMap |
||
310 | * |
||
311 | * @param string|null $statementGuid |
||
312 | * |
||
313 | * @return Statement|null The first statement with the given GUID or null if not found. |
||
314 | */ |
||
315 | public function getFirstStatementWithGuid( $statementGuid ) { |
||
324 | |||
325 | /** |
||
326 | * @since 4.1 |
||
327 | * |
||
328 | * @param StatementFilter $filter |
||
329 | * |
||
330 | * @return self |
||
331 | */ |
||
332 | public function filter( StatementFilter $filter ) { |
||
343 | |||
344 | /** |
||
345 | * Removes all statements from this list. |
||
346 | * |
||
347 | * @since 7.0 |
||
348 | */ |
||
349 | public function clear() { |
||
352 | |||
353 | /** |
||
354 | * @see http://php.net/manual/en/language.oop5.cloning.php |
||
355 | * |
||
356 | * @since 5.1 |
||
357 | */ |
||
358 | public function __clone() { |
||
363 | |||
364 | } |
||
365 |
This class constant has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the constant will be removed from the class and what other constant to use instead.