在声明变量后设置变量的值


Set a variable's value after it's declared

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

$menu = 'View archives for '.$year;
$year = 2013; //Note that `$year` is set after the above.

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

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

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

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

$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和相关功能的手册。

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

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

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

是不可能的。$year的定义必须先于使用它的任何事物的定义。