![](/img/trans.png)
[英]Can I pass a DEFINED constant to a function through a variable in PHP?
[英]PHP how I can pass arguments to constant
我正在寻找一个将参数传递给动态常量Name的解决方案。
<?php
class L {
const profile_tag_1 = 'Bla bla Age from %s to %s';
const profile_tag_2 = 'Wow Wow Age from %s to %s';
public static function __callStatic($string, $args) {
return vsprintf(constant("self::" . $string), $args);
}
}
我的代码
$x = 1;
echo constant("L::profile_tag_".$x); // arguments: 20, 30
我想得到
Bla bla Age from 20 to 30
我怎样才能将我的两个论点传递给它?
您可以使用func_get_args()
和array_shift()
来隔离常量字符串名称。
[ 键盘直播 ]
<?php
class L {
const profile_tag_1 = 'Bla bla Age from %s to %s';
const profile_tag_2 = 'Wow Wow Age from %s to %s';
public static function __callStatic() {
$args = func_get_args();
$string = array_shift($args);
return vsprintf(constant('self::' . $string), $args);
}
}
L::__callStatic('profile_tag_1',12,12);
但是,请注意当使用此函数与静态方法的泛型调用时,您需要更改__callStatic
签名以允许$name
和$arguments
如下所示:
class L {
const profile_tag_1 = 'Bla bla Age from %s to %s';
const profile_tag_2 = 'Wow Wow Age from %s to %s';
public static function __callStatic($name, $args) {
$string = array_shift($args);
return vsprintf(constant('self::' . $string), $args);
}
}
L::format('profile_tag_1',12,12);
虽然,有一种更好的方法来执行你需要的东西(在评论中阅读Yoshi),考虑到你正在使用静态的东西:
echo sprintf(L::profile_tag_1,12,14);
此时你甚至不需要一个Class
。
试试这个:
echo L::__callStatic("profile_tag_".$x, array(20, 30));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.