Completed
Branch master (195c43)
by
unknown
04:51
created

src/I18n/Messages.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php declare(strict_types=1);
2
3
namespace Neomerx\JsonApi\I18n;
4
5
/**
6
 * Copyright 2015-2019 [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
     */
39 10
    public static function compose(string $message, ...$parameters): string
40
    {
41 10
        $translation = static::getTranslation($message);
42 10
        $result      = empty($parameters) === false ? vsprintf($translation, $parameters) : $translation;
43
44 10
        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 10
    public static function getTranslation(string $message): string
55
    {
56 10
        return array_key_exists($message, static::$translations) === true ? static::$translations[$message] : $message;
0 ignored issues
show
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...
57
    }
58
59
    /**
60
     * Set translations for messages.
61
     *
62
     * @param array $translations
63
     *
64
     * @return void
65
     */
66 1
    public static function setTranslations(array $translations): void
67
    {
68 1
        static::$translations = $translations;
69 1
    }
70
}
71