PHP 魔术方法中的 vprintf

PHP vprintf in magic method

我的 PHP 包含作为常量的可翻译值。通过使用常量名称调用 class,应返回格式化值。

class Test {
    const translation_value = 'Foo %s, bar %s';
    public static function __callStatic($string, $args) {
        return vsprintf(constant("self::" . $string), $args);
    }
}

如果我通过 Test::{"translation_value"}(["test", "test2"]); PHP 调用 class 显示两个错误:

Notice: Array to string conversion [...] on line 4
PHP Warning: vsprintf(): Too few arguments [...] on line 4

我做错了什么?

如果我通过手动调用来测试 vprintf 函数 (vsprintf("Foo %s, bar %s", ["val1", "val2"]);) PHP 会创建预期的输出:Foo val1, bar val2

__callStatic($string, $args)的第二个参数是参数列表。您有 1 个参数,因此您需要使用数组的第一个元素:

return vsprintf(constant("self::" . $string), $args[0]);

或者使用平面参数调用它:

Test::translation_value("test", "test2");