Single::setGender()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: rikosage
5
 * Date: 23/01/19
6
 * Time: 00:43
7
 */
8
9
namespace rikosage\NumberWordify\Rank;
10
11
12
use rikosage\NumberWordify\Base\Declinable;
13
use rikosage\NumberWordify\Base\BaseRank;
14
15
/**
16
 * Вспомогательные слова для разряда единиц.
17
 * @package rikosage\NumberWordify\Rank
18
 */
19
class Single extends BaseRank implements Declinable
20
{
21
    /* @var int */
22
    private $gender;
23
24
    private $genderMethodMap = [
25
        Declinable::TYPE_MASCULINE => 'getMasculineVariants',
26
        Declinable::TYPE_FEMININE => 'getFeminineVariant',
27
    ];
28
29
    protected $words = [
30
        0 => '',
31
        1 => 'один',
32
        2 => 'два',
33
        3 => 'три',
34
        4 => 'четыре',
35
        5 => 'пять',
36
        6 => 'шесть',
37
        7 => 'семь',
38
        8 => 'восемь',
39
        9 => 'девять',
40
    ];
41
42
    /**
43
     * @inheritdoc
44
     */
45
    public function getWord($key): string
46
    {
47
        if (!$this->gender) {
48
            return $this->words[$key];
49
        }
50
        $dependent = call_user_func([$this, $this->genderMethodMap[$this->gender]]);
51
        return isset($dependent[$key]) ? $dependent[$key] : $this->words[$key];
52
53
    }
54
55
    /**
56
     * @inheritdoc
57
     */
58
    public function setGender($gender)
59
    {
60
        $this->gender = $gender;
61
    }
62
63
    /**
64
     * Склонения для зависимых чисел в мужском роде
65
     *
66
     * @return array
67
     */
68
    private function getMasculineVariants()
69
    {
70
        return [1 => 'один', 2 => 'два'];
71
    }
72
73
    /**
74
     * Склонения для зависимых чисел в женском роде
75
     *
76
     * @return array
77
     */
78
    private function getFeminineVariant()
79
    {
80
        return [1 => 'одна', 2 => 'две'];
81
    }
82
}