我喜欢这样: 这些是我的菜单项:
$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
的定义必须先于使用它的任何事物的定义。