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 |
||
| 12 | abstract class Offer extends BaseModel |
||
| 13 | { |
||
| 14 | const NUMBER_LIMIT = 99999999999999999999; |
||
| 15 | /** |
||
| 16 | * @inheritdoc |
||
| 17 | */ |
||
| 18 | public static $tag = 'offer'; |
||
| 19 | |||
| 20 | public $id; |
||
| 21 | public $cbid; |
||
| 22 | public $bid; |
||
| 23 | public $fee; |
||
| 24 | |||
| 25 | public $url; |
||
| 26 | public $price; |
||
| 27 | public $oldprice; |
||
| 28 | public $currencyId; |
||
| 29 | public $categoryId; |
||
| 30 | public $pictures = []; |
||
| 31 | public $delivery; |
||
| 32 | |||
| 33 | /** |
||
| 34 | * Опции доставки |
||
| 35 | * |
||
| 36 | * @var array |
||
| 37 | */ |
||
| 38 | public $deliveryOptions = []; |
||
| 39 | |||
| 40 | public $pickup; |
||
| 41 | public $available; |
||
| 42 | public $store; |
||
| 43 | |||
| 44 | public $outlets = []; |
||
| 45 | |||
| 46 | public $description; |
||
| 47 | public $sales_notes; |
||
| 48 | |||
| 49 | public $minQuantity; |
||
| 50 | public $stepQuantity; |
||
| 51 | |||
| 52 | public $manufacturer_warranty; |
||
| 53 | public $country_of_origin; |
||
| 54 | public $adult; |
||
| 55 | public $age; |
||
| 56 | public $barcode; |
||
| 57 | public $cpa; |
||
| 58 | public $params = []; |
||
| 59 | |||
| 60 | public $expiry; |
||
| 61 | public $weight; |
||
| 62 | |||
| 63 | |||
| 64 | /** |
||
| 65 | * Элемент предназначен для указания габаритов товара (длина, ширина, высота) в упаковке. Размеры указываются в сантиметрах. |
||
| 66 | * |
||
| 67 | * @var array |
||
| 68 | */ |
||
| 69 | public $dimensionsValues = []; |
||
| 70 | |||
| 71 | public $downloadable; |
||
| 72 | public $group_id; |
||
| 73 | |||
| 74 | /** |
||
| 75 | * Элемент предназначен для передачи рекомендованных товаров. |
||
| 76 | * |
||
| 77 | * @var array |
||
| 78 | */ |
||
| 79 | public $recValues = []; |
||
| 80 | |||
| 81 | /** |
||
| 82 | * @inheritdoc |
||
| 83 | */ |
||
| 84 | public static function getTagProperties() { |
||
| 94 | |||
| 95 | public function getRec() { |
||
| 102 | |||
| 103 | public function getDimensions() { |
||
| 110 | |||
| 111 | /** |
||
| 112 | * @inheritdoc |
||
| 113 | */ |
||
| 114 | public function getYmlAttributes() |
||
| 144 | |||
| 145 | /** |
||
| 146 | * @inheritdoc |
||
| 147 | */ |
||
| 148 | public function rules() |
||
| 334 | |||
| 335 | /** |
||
| 336 | * @param array $params |
||
| 337 | */ |
||
| 338 | public function setParams(array $params) |
||
| 342 | |||
| 343 | /** |
||
| 344 | * @param array $pictures |
||
| 345 | */ |
||
| 346 | public function setPictures(array $pictures) |
||
| 350 | |||
| 351 | /** |
||
| 352 | * @inheritdoc |
||
| 353 | */ |
||
| 354 | protected function getYmlBody() |
||
| 375 | |||
| 376 | /** |
||
| 377 | * Добавляет теги ддля опций доставки |
||
| 378 | * |
||
| 379 | * @param $string |
||
| 380 | * |
||
| 381 | * @throws Exception |
||
| 382 | */ |
||
| 383 | View Code Duplication | protected function appendDeliveryOptions(&$string) { |
|
| 396 | |||
| 397 | /** |
||
| 398 | * Добавляет теги ддля опций доставки |
||
| 399 | * |
||
| 400 | * @param $string |
||
| 401 | * |
||
| 402 | * @throws Exception |
||
| 403 | */ |
||
| 404 | View Code Duplication | protected function appendOutletOptions(&$string) { |
|
| 418 | |||
| 419 | /** |
||
| 420 | * @param string $attribute |
||
| 421 | * @param string $value |
||
| 422 | * @return string |
||
| 423 | */ |
||
| 424 | View Code Duplication | protected function getYmlParamTag($attribute, $value) |
|
| 434 | |||
| 435 | /** |
||
| 436 | * @param string $value |
||
| 437 | * @return string |
||
| 438 | */ |
||
| 439 | View Code Duplication | protected function getYmlPictureTag($value) |
|
| 449 | } |
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.