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.