-1

我喜欢这样:这些是我的菜单项:

$menu = 'View archives for '.$year;

$year = 2013; //Note that `$year` is set after the above.

在不进行任何更改的情况下,我该如何做这样的事情(稍后设置变量值)?

我正在尝试这个,但失败了。

$menu = 'View archives for '. &$year;

$year = '2013';
4

4 回答 4

1

最接近您可以做到这一点的方法是使用引用,但这会使您的代码成为一个邪恶的、不可维护的、容易出错的雷区。如果您不知道为什么引用是危险的,请阅读本文
不过,如果您愿意,您可以自由尝试:

$year = null;
$menu = array('View archives for ', &$year);//pass reference to $year
$year = '2013';
echo implode('', $menu);

如您所见,在传递引用之前我仍然必须定义变量(du'h,您不能引用即将存在的内容,只能引用存在的内容)。
完成此操作后,您可以分配任何让您心血来潮的值$year​​,并且自动地,$menu数组中的第二个值将跟随,因为它只是引用$year变量。

不过,如果您的问题中的片段是您想要做的全部,为什么不使用sprintf

$menu = 'View archives for %s';
//some code
$year = '2013';
$menu = sprintf($menu, $year);
echo $menu;//sure enough: View archives for 2013

作为额外的奖励,您可以一遍又一遍地循环使用它:

$format = 'View archives for %s';
for ($i=2010;$i<2014;++$i)
{
    printf($format, $i);
    echo '<br/>';
}

这打印:

View archives for 2010
View archives for 2011
View archives for 2012
View archives for 2013

很简单,一旦你通读了printf相关功能的手册。

于 2013-10-30T15:42:14.490 回答
0

这是不可能的。的定义$year必须在任何使用它的定义之前。

于 2013-10-30T15:40:21.070 回答
0

程序流的整个概念是必须先声明变量的值,然后才能使用它。还有其他软件概念(流式编程),其中代码在其所有输入存在之前不会执行 - 但 php 不是那种语言。

$year唯一的解决方案是在使用它之前初始化它的值——改变语句的顺序。

于 2013-10-30T15:41:55.163 回答
0

如果您想添加年份,那么这应该可以完成您的工作 $menu = 'View archives for '.date('Y'); 并且在声明之前不能使用变量

于 2013-10-30T15:42:17.180 回答