我有以下课程:
<?php
class L {
const login = 'Login';
const title_404 = '404';
const title_dyn = 'Title: %s';
const page_dyn = 'Page: %s - %s';
public static function __callStatic($string, $args) {
vsprintf(constant("self::" . $string), $args);
}
}
它不会通过传递的参数替换%s:
L::login; --> Login
L::title_404; --> 404
L::title_dyn('test'); --> empty
L::page_dyn('test', 'more'); --> empty
L::login(); --> empty
我应该使用L :: title_dyn(&#39; test&#39;); - &GT; &#34;标题:test&#34;
我做错了什么?
答案 0 :(得分:1)
大概你的完整测试用例是这样的:
<?php
class L {
const login = 'Login';
const title_404 = '404';
const title_dyn = 'Title: %s';
const page_dyn = 'Page: %s - %s';
public static function __callStatic($string, $args) {
vsprintf(constant("self::" . $string), $args);
}
}
echo L::login . "\n"; // "Login"
echo L::title_404 . "\n"; // "404"
echo L::title_dyn('test') . "\n"; // (empty)
echo L::page_dyn('test', 'more') . "\n"; // (empty)
echo L::login() . "\n"; // (empty)
(下次请在问题中写这个)
前两个工作是因为你没有使用函数调用语法,所以常量是echo
'按原样。
后三者是空的,因为尽管__callStatic
完成了它的工作,但它完全放弃了这项工作:你永远不会返回vsprintf
的结果。回想一下,vsprintf
不输出任何内容 - 返回其结果。你也没有写任何echo
。因此,您的调用代码没有使用的值,也没有函数本身的输出。就像你的问题所说的那样,Presto。
你几乎肯定想要这样做:
public static function __callStatic($string, $args) {
return vsprintf(constant("self::" . $string), $args);
}