基于其他变量值和静态文本构造 PHP 变量名称

Construct a PHP variable name based on other variable values and static text

提问人:jkramp 提问时间:11/30/2009 更新时间:7/1/2014 访问量:6548

问:

我想告诉我的函数根据星期几调用哪个变量。星期几存储在 $s_day 中,我想调用的变量会根据它是哪一天而变化。

例如:

我在 $d_monday_text1 中存储了一个字符串“欢迎来到本周”。与其构建一组 7 个条件语句(例如,if date=monday echo $foo,else if date=tuesday echo $bar...),我可以通过连接变量名称来更改函数中调用的变量的名称吗?

$s_day = date("l");
$text1 = '$d_'.$s_day.'_text1';

我希望这能计算出 $d_monday_text1,如上所述,它的值为“欢迎来到本周”。所以,稍后我想使用:

echo $text1;

产生结果输出 = 欢迎来到本周。

我已经研究了变量变量,这可能是要走的路,但我正在为语法而苦苦挣扎。我可以让它呼应串联的名称,但我不知道如何评估该名称。

php 变量

评论

0赞 outis 10/1/2010
我可以在 PHP 中使用生成的变量名称吗?

答:

3赞 Kenji Kina 11/30/2009 #1

您可以使用以下语法:

$text 1美元

我以前用过这个。评估内容如下:

$($text 1)

10赞 Jani Hartikainen 11/30/2009 #2

变量不是一个好主意 - 你应该使用数组。它们更适合这个问题。

例如,您可以使用如下内容:

$messages = array(
    'monday' => 'Welcome to the week',
    'tuesday' => 'Blah blah',
    'wednesday' => 'wed',
    'thursday' => 'thu',
    'friday' => 'fri',
    'saturday' => 'sat',
    'sunday' => 'week is over!'
);

$dayName = date('l');
echo $messages[$dayName];

组是用于存储多个相关值的数据格式,例如这些值。

评论

0赞 jkramp 11/30/2009
谢谢贾尼。我认为这适用于比我更小的数据集。它确实符合给出的示例,这是对我在这里所做的事情的简化解释。
0赞 Jani Hartikainen 11/30/2009
一般来说,我认为只要你有任何大小的数据集,就应该使用数组。对变量使用动态命名通常是一个糟糕的主意,因为它不会为数据提供任何结构,并且会降低代码的可读性。
0赞 jkramp 11/30/2009
好的,让我再多说一点,我会更新这个问题,看看是否有更好的方法来使用数组。可能是由于我的数据结构方式,使用动态表达式比使用数组更容易。这并不是说我的数据结构没有缺陷。
0赞 Sergey Onishchenko 7/1/2014 #3

让我们考虑以下示例:

$construction_no = 5;
$construction_5 = 'Door';

$var_name = 'construction_'.$construction_no;
$var_value = ${$var_name};
echo $var_value; //Door

面向对象的方法

$var_value = $this->{$var_name};
echo $var_value; //Door