Messages::compose()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 2
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Neomerx\JsonApi\I18n;
4
5
/**
6
 * Copyright 2015-2020 [email protected]
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 * http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
20
21
/**
22
 * @package Neomerx\JsonApi
23
 */
24
class Messages
25
{
26
    /**
27
     * @var array
28
     */
29
    private static $translations = [];
30
31
    /**
32
     * Try to translate the message and format it with the given parameters.
33
     *
34
     * @param string $message
35
     * @param mixed  ...$parameters
36
     *
37
     * @return string
38
     */
0 ignored issues
show
Documentation introduced by
Consider making the type for parameter $parameters a bit more specific; maybe use array.
Loading history...
39 12
    public static function compose(string $message, ...$parameters): string
40
    {
41 12
        $translation = static::getTranslation($message);
42 12
        $result      = empty($parameters) === false ? \vsprintf($translation, $parameters) : $translation;
43
44 12
        return $result;
45
    }
46
47
    /**
48
     * Translate message if configured or return the original untranslated message.
49
     *
50
     * @param string $message
51
     *
52
     * @return string
53
     *
54
     * @SuppressWarnings(PHPMD.UndefinedVariable) PHPMD currently has a glitch with `$message`
55
     */
56 12
    public static function getTranslation(string $message): string
57
    {
58 12
        return static::$translations[$message] ?? $message;
0 ignored issues
show
Bug introduced by
Since $translations is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $translations to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
59
    }
60
61
    /**
62
     * Set translations for messages.
63
     *
64
     * @param array $translations
65
     *
66
     * @return void
67
     */
68 1
    public static function setTranslations(array $translations): void
69
    {
70 1
        static::$translations = $translations;
0 ignored issues
show
Bug introduced by
Since $translations is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $translations to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
71 1
    }
72
}
73