Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
9 | class Google_Maps { |
||
10 | |||
11 | /** |
||
12 | * @var string |
||
13 | */ |
||
14 | protected static $_version = '0.1.6'; |
||
15 | |||
16 | /** |
||
17 | * @var string |
||
18 | */ |
||
19 | protected static $_api_key = ''; |
||
20 | |||
21 | /** |
||
22 | * @var Geocoder |
||
23 | */ |
||
24 | protected static $_geocoder; |
||
25 | |||
26 | /** |
||
27 | * These conditions will be used to determine whether to enqueue the Google Maps JS. |
||
28 | * |
||
29 | * @var array |
||
30 | */ |
||
31 | protected static $_script_conditions = array(); |
||
32 | |||
33 | /** |
||
34 | * The path to this library's directory |
||
35 | * |
||
36 | * @var string |
||
37 | */ |
||
38 | protected static $_source_dir; |
||
39 | |||
40 | /** |
||
41 | * The url to this module's directory |
||
42 | * |
||
43 | * @var string |
||
44 | */ |
||
45 | protected static $_source_url; |
||
46 | |||
47 | /** |
||
48 | * |
||
49 | */ |
||
50 | public static function initialize() { |
||
57 | |||
58 | /** |
||
59 | * @return string |
||
60 | */ |
||
61 | 1 | public static function api_key() { |
|
62 | |||
63 | 1 | return static::$_api_key; |
|
64 | |||
65 | } |
||
66 | |||
67 | /** |
||
68 | * @return Geocoder |
||
69 | */ |
||
70 | 1 | public static function geocoder() { |
|
71 | |||
72 | 1 | if ( ! isset( static::$_geocoder ) ) { |
|
73 | 1 | static::$_geocoder = new Geocoder( ['api_key' => self::api_key() ] ); |
|
74 | } |
||
75 | |||
76 | 1 | return static::$_geocoder; |
|
77 | |||
78 | } |
||
79 | |||
80 | /** |
||
81 | * @param array $args |
||
82 | * @return Map |
||
83 | */ |
||
84 | 1 | public static function make_new_map( $args = array() ) { |
|
85 | |||
86 | 1 | $class = __NAMESPACE__ . '\Map'; |
|
87 | 1 | return new $class( $args ); |
|
88 | |||
89 | } |
||
90 | |||
91 | /** |
||
92 | * @param string $key |
||
93 | */ |
||
94 | 1 | public static function register_api_key( $key ) { |
|
95 | |||
96 | 1 | static::$_api_key = filter_var( $key, FILTER_SANITIZE_STRING ); |
|
97 | |||
98 | 1 | } |
|
99 | |||
100 | /** |
||
101 | * @param callable $condition |
||
102 | */ |
||
103 | 1 | public static function register_script_condition( $condition ) { |
|
104 | |||
105 | 1 | static::$_script_conditions[] = $condition; |
|
106 | |||
107 | 1 | } |
|
108 | |||
109 | public static function _wp_enqueue_scripts_9() { |
||
135 | |||
136 | 1 | public static function script_conditions() { |
|
137 | |||
138 | 1 | return static::$_script_conditions; |
|
139 | |||
140 | } |
||
141 | |||
142 | /** |
||
143 | * @param string $address |
||
144 | * @param array $args |
||
145 | * @return Marker |
||
146 | */ |
||
147 | 1 | View Code Duplication | public static function make_marker_by_address( $address, $args = array() ) { |
157 | |||
158 | /** |
||
159 | * @param float $lat |
||
160 | * @param float $lng |
||
161 | * |
||
162 | * @return Marker |
||
163 | */ |
||
164 | 1 | View Code Duplication | public static function make_marker_by_position( $lat, $lng, $args = array() ) { |
177 | |||
178 | /** |
||
179 | * @param string $destination |
||
180 | * @param array $args |
||
181 | * @return string |
||
182 | */ |
||
183 | 1 | public static function driving_directions_href($destination, $args = array() ) { |
|
191 | |||
192 | /** |
||
193 | * @return string |
||
194 | */ |
||
195 | 1 | public static function source_dir() { |
|
200 | |||
201 | /** |
||
202 | * @return string |
||
203 | */ |
||
204 | public static function source_url() { |
||
217 | |||
218 | 1 | public static function version() { |
|
223 | |||
224 | } |
||
225 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.