声明后设置变量的值

时间:2013-10-30 15:38:10

标签: php

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

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

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

如果不做任何更改,我该怎样做(稍后设置变量值)?

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

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

$year = '2013';

4 个答案:

答案 0 :(得分:1)

最接近你可以做到这一点的方法是使用引用,但这将使你的代码成为一个不圣洁,不可维护,容易出错的雷区。 Read this if you don't know why references are dangerous
不过,如果您愿意,可以自由尝试:

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

正如你所看到的,我仍然必须先定义变量,然后我才能传递一个引用(呃,你不能引用即将存在的内容,只有存在的内容)。
完成后,您可以将任意值突出显示$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

很容易,一旦你read through the manual of printf and related functions

答案 1 :(得分:0)

这是不可能的。 $year的定义必须先于使用它的任何内容的定义。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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