Complex classes like Message 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 Message, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
7 | class Message implements JsonSerializable |
||
8 | { |
||
9 | /** |
||
10 | * The BearyChat client for sending message. |
||
11 | * |
||
12 | * @var \ElfSundae\BearyChat\Client |
||
13 | */ |
||
14 | protected $client; |
||
15 | |||
16 | /** |
||
17 | * The text to be sent with the message. |
||
18 | * |
||
19 | * @var string |
||
20 | */ |
||
21 | protected $text; |
||
22 | |||
23 | /** |
||
24 | * The notification for the text. |
||
25 | * |
||
26 | * @var string |
||
27 | */ |
||
28 | protected $notification; |
||
29 | |||
30 | /** |
||
31 | * Indicates the text field should be parsed as markdown syntax. |
||
32 | * |
||
33 | * @var bool |
||
34 | */ |
||
35 | protected $markdown; |
||
36 | |||
37 | /** |
||
38 | * The channel that the message should be sent to. |
||
39 | * |
||
40 | * @var string |
||
41 | */ |
||
42 | protected $channel; |
||
43 | |||
44 | /** |
||
45 | * The user that the message should be sent to. |
||
46 | * |
||
47 | * @var string |
||
48 | */ |
||
49 | protected $user; |
||
50 | |||
51 | /** |
||
52 | * The attachments to be sent. |
||
53 | * |
||
54 | * @var array |
||
55 | */ |
||
56 | protected $attachments = []; |
||
57 | |||
58 | /** |
||
59 | * The default values for each attachment. |
||
60 | * |
||
61 | * @var array |
||
62 | */ |
||
63 | protected $attachmentDefaults = []; |
||
64 | |||
65 | /** |
||
66 | * Create a new message. |
||
67 | * |
||
68 | * @param \ElfSundae\BearyChat\Client|null $client |
||
69 | */ |
||
70 | 13 | public function __construct(Client $client = null) |
|
76 | |||
77 | /** |
||
78 | * Get the BearyChat client for sending message. |
||
79 | * |
||
80 | * @return \ElfSundae\BearyChat\Client |
||
81 | */ |
||
82 | public function getClient() |
||
86 | |||
87 | /** |
||
88 | * Get the text. |
||
89 | * |
||
90 | * @return string |
||
91 | */ |
||
92 | 2 | public function getText() |
|
96 | |||
97 | /** |
||
98 | * Set the text. |
||
99 | * |
||
100 | * @param string $text |
||
101 | * @return $this |
||
102 | */ |
||
103 | 2 | public function setText($text) |
|
109 | |||
110 | /** |
||
111 | * Set the text. |
||
112 | * |
||
113 | * @param string $text |
||
114 | * @return $this |
||
115 | */ |
||
116 | 2 | public function text($text) |
|
120 | |||
121 | /** |
||
122 | * Get the notification. |
||
123 | * |
||
124 | * @return string |
||
125 | */ |
||
126 | 2 | public function getNotification() |
|
130 | |||
131 | /** |
||
132 | * Set the notification. |
||
133 | * |
||
134 | * @param string $notification |
||
135 | * @return $this |
||
136 | */ |
||
137 | 1 | public function setNotification($notification) |
|
143 | |||
144 | /** |
||
145 | * Set the notification. |
||
146 | * |
||
147 | * @param string $notification |
||
148 | * @return $this |
||
149 | */ |
||
150 | 1 | public function notification($notification) |
|
154 | |||
155 | /** |
||
156 | * Get the markdown. |
||
157 | * |
||
158 | * @return bool |
||
159 | */ |
||
160 | 2 | public function getMarkdown() |
|
164 | |||
165 | /** |
||
166 | * Set the markdown. |
||
167 | * |
||
168 | * @param bool $markdown |
||
169 | * @return $this |
||
170 | */ |
||
171 | 1 | public function setMarkdown($markdown) |
|
177 | |||
178 | /** |
||
179 | * Set the markdown. |
||
180 | * |
||
181 | * @param bool $markdown |
||
182 | * @return $this |
||
183 | */ |
||
184 | 1 | public function markdown($markdown = true) |
|
188 | |||
189 | /** |
||
190 | * Get the channel which the message should be sent to. |
||
191 | * |
||
192 | * @return string |
||
193 | */ |
||
194 | 3 | public function getChannel() |
|
198 | |||
199 | /** |
||
200 | * Set the channel which the message should be sent to. |
||
201 | * |
||
202 | * @param string $channel |
||
203 | * @return $this |
||
204 | */ |
||
205 | 3 | public function setChannel($channel) |
|
211 | |||
212 | /** |
||
213 | * Set the channel which the message should be sent to. |
||
214 | * |
||
215 | * @param string $channel |
||
216 | * @return $this |
||
217 | */ |
||
218 | 1 | public function channel($channel) |
|
222 | |||
223 | /** |
||
224 | * Get the user which the message should be sent to. |
||
225 | * |
||
226 | * @return string |
||
227 | */ |
||
228 | 3 | public function getUser() |
|
232 | |||
233 | /** |
||
234 | * Set the user which the message should be sent to. |
||
235 | * |
||
236 | * @param string $user |
||
237 | * @return $this |
||
238 | */ |
||
239 | 3 | public function setUser($user) |
|
245 | |||
246 | /** |
||
247 | * Set the user which the message should be sent to. |
||
248 | * |
||
249 | * @param string $user |
||
250 | * @return $this |
||
251 | */ |
||
252 | 1 | public function user($user) |
|
256 | |||
257 | /** |
||
258 | * Set the target (user or channel) that the message should be sent to. |
||
259 | * |
||
260 | * The target may be started with '@' for sending to user, and the channel's |
||
261 | * starter mark '#' is optional. |
||
262 | * |
||
263 | * It will remove all targets if the given target is null. |
||
264 | * |
||
265 | * @param string $target |
||
266 | * @return $this |
||
267 | */ |
||
268 | 2 | public function to($target) |
|
290 | |||
291 | /** |
||
292 | * Get the attachments for the message. |
||
293 | * |
||
294 | * @return array |
||
295 | */ |
||
296 | 5 | public function getAttachments() |
|
300 | |||
301 | /** |
||
302 | * Set the attachments for the message. |
||
303 | * |
||
304 | * @param mixed $attachments |
||
305 | * @return $this |
||
306 | */ |
||
307 | 1 | public function setAttachments($attachments) |
|
319 | |||
320 | /** |
||
321 | * Set the attachments for the message. |
||
322 | * |
||
323 | * @param mixed $attachments |
||
324 | * @return $this |
||
325 | */ |
||
326 | public function attachments($attachments) |
||
330 | |||
331 | /** |
||
332 | * Add an attachment to the message. |
||
333 | * |
||
334 | * The parameter can be an payload array that contains all of attachment's fields. |
||
335 | * The parameters can also be attachment's fields that in order of |
||
336 | * text, title, images and color. Except the text, other parameters |
||
337 | * can be ignored. |
||
338 | * |
||
339 | * @param mixed $attachment |
||
340 | * @return $this |
||
341 | */ |
||
342 | 5 | public function addAttachment($attachment) |
|
356 | |||
357 | /** |
||
358 | * Convert arguments list to attachment payload. |
||
359 | * |
||
360 | * @param array $arguments |
||
361 | * @return array |
||
362 | */ |
||
363 | 4 | protected function getAttachmentPayloadFromArguments($arguments) |
|
396 | |||
397 | /** |
||
398 | * Get the attachments' defaults. |
||
399 | * |
||
400 | * @return array |
||
401 | */ |
||
402 | 1 | public function getAttachmentDefaults() |
|
406 | |||
407 | /** |
||
408 | * Set the attachments' defaults. |
||
409 | * |
||
410 | * @param array $defaults |
||
411 | * @return $this |
||
412 | */ |
||
413 | 2 | public function setAttachmentDefaults(array $defaults) |
|
419 | |||
420 | /** |
||
421 | * Add an attachment to the message. |
||
422 | * It alias to `addAttachment`. |
||
423 | * |
||
424 | * @param mixed $attachment |
||
425 | * @return $this |
||
426 | */ |
||
427 | 3 | public function add($attachment) |
|
431 | |||
432 | /** |
||
433 | * Remove attachment[s] for the message. |
||
434 | * |
||
435 | * @return $this |
||
436 | */ |
||
437 | 2 | public function removeAttachments() |
|
453 | |||
454 | /** |
||
455 | * Remove attachment[s] for the message. |
||
456 | * It alias to `removeAttachments`. |
||
457 | * |
||
458 | * @return $this |
||
459 | */ |
||
460 | 1 | public function remove() |
|
464 | |||
465 | /** |
||
466 | * Configure message defaults. |
||
467 | * |
||
468 | * @param array $defaults |
||
469 | */ |
||
470 | protected function configureDefaults(array $defaults) |
||
488 | |||
489 | /** |
||
490 | * Convert any type to string. |
||
491 | * |
||
492 | * @param mixed $value |
||
493 | * @param int $jsonOptions |
||
494 | * @return string |
||
495 | */ |
||
496 | 4 | protected function stringValue($value, $jsonOptions = JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) |
|
510 | |||
511 | /** |
||
512 | * Convert the message to an array. |
||
513 | * |
||
514 | * @return array |
||
515 | */ |
||
516 | 1 | public function toArray() |
|
537 | |||
538 | /** |
||
539 | * Convert the message to JSON string. |
||
540 | * |
||
541 | * @param int $options |
||
542 | * @return string |
||
543 | */ |
||
544 | public function toJson($options = 0) |
||
548 | |||
549 | /** |
||
550 | * Serializes the object to a value that can be serialized natively by json_encode(). |
||
551 | * |
||
552 | * @return array |
||
553 | */ |
||
554 | public function jsonSerialize() |
||
558 | |||
559 | /** |
||
560 | * Send the message. |
||
561 | * |
||
562 | * The parameters can be `($text, $markdown, $notification)`, and the $text and |
||
563 | * the $notification can be `null` that does not modify the exist field. |
||
564 | * The parameters can also be |
||
565 | * `($text, $attachment_text, $attachment_title, $attachment_images, $attachment_color)`. |
||
566 | * |
||
567 | * @return bool |
||
568 | */ |
||
569 | public function send() |
||
602 | |||
603 | /** |
||
604 | * Send the message to the given target. |
||
605 | * |
||
606 | * @param mixed $target |
||
607 | * @return bool |
||
608 | */ |
||
609 | public function sendTo($target) |
||
615 | |||
616 | /** |
||
617 | * Convert the message to its string representation. |
||
618 | * |
||
619 | * @return string |
||
620 | */ |
||
621 | public function __toString() |
||
625 | } |
||
626 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.