Complex classes like SimpleMail 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 SimpleMail, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
33 | class SimpleMail |
||
34 | { |
||
35 | /** |
||
36 | * @var int $_wrap |
||
37 | */ |
||
38 | protected $_wrap = 78; |
||
39 | |||
40 | /** |
||
41 | * @var array $_to |
||
42 | */ |
||
43 | protected $_to = array(); |
||
44 | |||
45 | /** |
||
46 | * @var string $_subject |
||
47 | */ |
||
48 | protected $_subject; |
||
49 | |||
50 | /** |
||
51 | * @var string $_message |
||
52 | */ |
||
53 | protected $_message; |
||
54 | |||
55 | /** |
||
56 | * @var array $_headers |
||
57 | */ |
||
58 | protected $_headers = array(); |
||
59 | |||
60 | /** |
||
61 | * @var string $_parameters |
||
62 | */ |
||
63 | protected $_params; |
||
64 | |||
65 | /** |
||
66 | * @var array $_attachments |
||
67 | */ |
||
68 | protected $_attachments = array(); |
||
69 | |||
70 | /** |
||
71 | * @var string $_uid |
||
72 | */ |
||
73 | protected $_uid; |
||
74 | |||
75 | /** |
||
76 | * Named constructor. |
||
77 | * |
||
78 | * @return static |
||
79 | */ |
||
80 | public static function make() |
||
84 | 38 | ||
85 | /** |
||
86 | * __construct |
||
87 | * |
||
88 | * Resets the class properties. |
||
89 | */ |
||
90 | public function __construct() |
||
94 | |||
95 | 38 | /** |
|
96 | 38 | * reset |
|
97 | 38 | * |
|
98 | 38 | * Resets all properties to initial state. |
|
99 | 38 | * |
|
100 | 38 | * @return self |
|
101 | 38 | */ |
|
102 | 38 | public function reset() |
|
114 | 4 | ||
115 | /** |
||
116 | 4 | * setTo |
|
117 | 4 | * |
|
118 | * @param string $email The email address to send to. |
||
119 | * @param string $name The name of the person to send to. |
||
120 | * |
||
121 | * @return self |
||
122 | */ |
||
123 | public function setTo($email, $name) |
||
128 | |||
129 | 2 | /** |
|
130 | * getTo |
||
131 | * |
||
132 | * Return an array of formatted To addresses. |
||
133 | * |
||
134 | * @return array |
||
135 | */ |
||
136 | public function getTo() |
||
140 | |||
141 | 3 | /** |
|
142 | 3 | * setFrom |
|
143 | 3 | * |
|
144 | 3 | * @param string $email The email to send as from. |
|
145 | * @param string $name The name to send as from. |
||
146 | * |
||
147 | * @return self |
||
148 | */ |
||
149 | public function setFrom($email, $name) |
||
154 | 1 | ||
155 | /** |
||
156 | * setCc |
||
157 | * |
||
158 | * @param array $pairs An array of name => email pairs. |
||
159 | * |
||
160 | * @return self |
||
161 | */ |
||
162 | public function setCc(array $pairs) |
||
166 | 3 | ||
167 | 3 | /** |
|
168 | * setBcc |
||
169 | * |
||
170 | * @param array $pairs An array of name => email pairs. |
||
171 | * |
||
172 | * @return self |
||
173 | */ |
||
174 | public function setBcc(array $pairs) |
||
178 | |||
179 | /** |
||
180 | * setReplyTo |
||
181 | * |
||
182 | * @param string $email |
||
183 | * @param string $name |
||
184 | * |
||
185 | * @return self |
||
186 | */ |
||
187 | public function setReplyTo($email, $name = null) |
||
191 | 3 | ||
192 | 3 | /** |
|
193 | 3 | * setHtml |
|
194 | 3 | * |
|
195 | 3 | * @return self |
|
196 | 3 | */ |
|
197 | 3 | public function setHtml() |
|
203 | |||
204 | /** |
||
205 | * setSubject |
||
206 | * |
||
207 | * @param string $subject The email subject |
||
208 | 3 | * |
|
209 | * @return self |
||
210 | 3 | */ |
|
211 | 3 | public function setSubject($subject) |
|
218 | |||
219 | /** |
||
220 | * getSubject function. |
||
221 | * |
||
222 | * @return string |
||
223 | */ |
||
224 | public function getSubject() |
||
228 | 3 | ||
229 | /** |
||
230 | * setMessage |
||
231 | * |
||
232 | * @param string $message The message to send. |
||
233 | * |
||
234 | * @return self |
||
235 | */ |
||
236 | public function setMessage($message) |
||
241 | |||
242 | 3 | /** |
|
243 | 3 | * getMessage |
|
244 | 3 | * |
|
245 | * @return string |
||
246 | */ |
||
247 | public function getMessage() |
||
251 | |||
252 | /** |
||
253 | * addAttachment |
||
254 | * |
||
255 | 1 | * @param string $path The file path to the attachment. |
|
256 | * @param string $filename The filename of the attachment when emailed. |
||
257 | 1 | * @param null $data |
|
258 | 1 | * |
|
259 | 1 | * @return self |
|
260 | */ |
||
261 | 1 | public function addAttachment($path, $filename = null, $data = null) |
|
273 | |||
274 | 2 | /** |
|
275 | * addAttachmentVar |
||
276 | * |
||
277 | * @param string $data the data to send |
||
278 | * @param string $filename the filename to use |
||
279 | * |
||
280 | * @return self |
||
281 | */ |
||
282 | public function addAttachmentVar($data, $filename = null) |
||
296 | |||
297 | 1 | /** |
|
298 | * getAttachmentData |
||
299 | 1 | * |
|
300 | * @param string $path The path to the attachment file. |
||
301 | * |
||
302 | * @return string |
||
303 | */ |
||
304 | public function getAttachmentData($path) |
||
312 | 2 | ||
313 | 1 | /** |
|
314 | 1 | * addMailHeader |
|
315 | 2 | * |
|
316 | 2 | * @param string $header The header to add. |
|
317 | * @param string $email The email to add. |
||
318 | * @param string $name The name to add. |
||
319 | * |
||
320 | * @return self |
||
321 | */ |
||
322 | public function addMailHeader($header, $email, $name = null) |
||
328 | |||
329 | /** |
||
330 | * addMailHeaders |
||
331 | * |
||
332 | * @param string $header The header to add. |
||
333 | * @param array $pairs An array of name => email pairs. |
||
334 | * |
||
335 | * @return self |
||
336 | 4 | */ |
|
337 | public function addMailHeaders($header, array $pairs) |
||
352 | 2 | ||
353 | /** |
||
354 | * addGenericHeader |
||
355 | * |
||
356 | * @param string $header The generic header to add. |
||
357 | * @param mixed $value The value of the header. |
||
358 | * |
||
359 | * @return self |
||
360 | 1 | */ |
|
361 | public function addGenericHeader($header, $value) |
||
370 | 1 | ||
371 | /** |
||
372 | 1 | * getHeaders |
|
373 | 1 | * |
|
374 | 1 | * Return the headers registered so far as an array. |
|
375 | * |
||
376 | 1 | * @return array |
|
377 | */ |
||
378 | public function getHeaders() |
||
382 | |||
383 | /** |
||
384 | * setAdditionalParameters |
||
385 | * |
||
386 | 1 | * Such as "[email protected] |
|
387 | * |
||
388 | 1 | * @param string $additionalParameters The addition mail parameter. |
|
389 | 1 | * |
|
390 | * @return self |
||
391 | 1 | */ |
|
392 | 1 | public function setParameters($additionalParameters) |
|
397 | 1 | ||
398 | 1 | /** |
|
399 | * getAdditionalParameters |
||
400 | 1 | * |
|
401 | * @return string |
||
402 | */ |
||
403 | public function getParameters() |
||
407 | |||
408 | /** |
||
409 | 3 | * setWrap |
|
410 | * |
||
411 | 3 | * @param int $wrap The number of characters at which the message will wrap. |
|
412 | 3 | * |
|
413 | * @return self |
||
414 | 3 | */ |
|
415 | 1 | public function setWrap($wrap = 78) |
|
424 | 1 | ||
425 | /** |
||
426 | * getWrap |
||
427 | 2 | * |
|
428 | * @return int |
||
429 | */ |
||
430 | public function getWrap() |
||
434 | |||
435 | 1 | /** |
|
436 | * hasAttachments |
||
437 | 1 | * |
|
438 | * Checks if the email has any registered attachments. |
||
439 | * |
||
440 | * @return bool |
||
441 | */ |
||
442 | public function hasAttachments() |
||
446 | |||
447 | 1 | /** |
|
448 | * assembleAttachment |
||
449 | * |
||
450 | * @return string |
||
451 | */ |
||
452 | public function assembleAttachmentHeaders() |
||
460 | |||
461 | 6 | /** |
|
462 | * assembleAttachmentBody |
||
463 | 6 | * |
|
464 | 6 | * @return string |
|
465 | 1 | */ |
|
466 | public function assembleAttachmentBody() |
||
484 | 6 | ||
485 | /** |
||
486 | * getAttachmentMimeTemplate |
||
487 | * |
||
488 | * @param array $attachment An array containing 'file' and 'data' keys. |
||
489 | * |
||
490 | * @return string |
||
491 | */ |
||
492 | public function getAttachmentMimeTemplate($attachment) |
||
508 | 4 | ||
509 | 4 | /** |
|
510 | 4 | * send |
|
511 | 4 | * |
|
512 | 4 | * @return boolean |
|
513 | 4 | * @throws \RuntimeException on no 'To: ' address to send to. |
|
514 | */ |
||
515 | public function send() |
||
535 | |||
536 | 12 | /** |
|
537 | 12 | * debug |
|
538 | 12 | * |
|
539 | 12 | * @return string |
|
540 | */ |
||
541 | public function debug() |
||
545 | |||
546 | /** |
||
547 | * magic __toString function |
||
548 | * |
||
549 | * @return string |
||
550 | */ |
||
551 | public function __toString() |
||
555 | |||
556 | 10 | /** |
|
557 | 10 | * formatHeader |
|
558 | 10 | * |
|
559 | 10 | * Formats a display address for emails according to RFC2822 e.g. |
|
560 | 10 | * Name <[email protected]> |
|
561 | 10 | * |
|
562 | 10 | * @param string $email The email address. |
|
563 | 10 | * @param string $name The display name. |
|
564 | 10 | * |
|
565 | 10 | * @return string |
|
566 | */ |
||
567 | 10 | public function formatHeader($email, $name = null) |
|
576 | |||
577 | /** |
||
578 | * encodeUtf8 |
||
579 | * |
||
580 | * @param string $value The value to encode. |
||
581 | 9 | * |
|
582 | * @return string |
||
583 | 9 | */ |
|
584 | public function encodeUtf8($value) |
||
592 | |||
593 | 3 | /** |
|
594 | 1 | * encodeUtf8Word |
|
595 | * |
||
596 | 2 | * @param string $value The word to encode. |
|
597 | * |
||
598 | * @return string |
||
599 | */ |
||
600 | public function encodeUtf8Word($value) |
||
604 | 3 | ||
605 | /** |
||
606 | 3 | * encodeUtf8Words |
|
607 | 1 | * |
|
608 | * @param string $value The words to encode. |
||
609 | 2 | * |
|
610 | * @return string |
||
611 | */ |
||
612 | public function encodeUtf8Words($value) |
||
621 | |||
622 | /** |
||
623 | * filterEmail |
||
624 | * |
||
625 | * Removes any carriage return, line feed, tab, double quote, comma |
||
626 | * and angle bracket characters before sanitizing the email address. |
||
627 | 1 | * |
|
628 | * @param string $email The email to filter. |
||
629 | 1 | * |
|
630 | * @return string |
||
631 | */ |
||
632 | public function filterEmail($email) |
||
647 | |||
648 | /** |
||
649 | * filterName |
||
650 | * |
||
651 | * Removes any carriage return, line feed or tab characters. Replaces |
||
652 | * double quotes with single quotes and angle brackets with square |
||
653 | * brackets, before sanitizing the string and stripping out html tags. |
||
654 | * |
||
655 | * @param string $name The name to filter. |
||
656 | * |
||
657 | * @return string |
||
658 | */ |
||
659 | public function filterName($name) |
||
676 | |||
677 | /** |
||
678 | * filterOther |
||
679 | * |
||
680 | * Removes ASCII control characters including any carriage return, line |
||
681 | * feed or tab characters. |
||
682 | * |
||
683 | * @param string $data The data to filter. |
||
684 | * |
||
685 | * @return string |
||
686 | */ |
||
687 | public function filterOther($data) |
||
691 | |||
692 | /** |
||
693 | * getHeadersForSend |
||
694 | * |
||
695 | * @return string |
||
696 | */ |
||
697 | public function getHeadersForSend() |
||
704 | |||
705 | /** |
||
706 | * getToForSend |
||
707 | * |
||
708 | * @return string |
||
709 | */ |
||
710 | public function getToForSend() |
||
717 | |||
718 | /** |
||
719 | * getUniqueId |
||
720 | * |
||
721 | * @return string |
||
722 | */ |
||
723 | public function getUniqueId() |
||
727 | |||
728 | /** |
||
729 | * getWrapMessage |
||
730 | * |
||
731 | * @return string |
||
732 | */ |
||
733 | public function getWrapMessage() |
||
737 | } |
||
738 |