2013-10-30 24 views
-1

後,我做的是這樣的:這是我的菜單項:設置一個變量的值,它宣佈

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

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

而不做任何改變,我怎麼可以做這樣的事情(後設置一個變量的值)?

我正在嘗試這個,失敗了。

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

$year = '2013'; 
+0

除非從前一個會話中存儲,否則您無法調用尚未聲明的變量。 – Kermit

+0

這顯然是錯誤的,你不能這樣做! –

+1

你爲什麼要這樣做? –

回答

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); 

正如你所看到的,我還是要定義變量之前,我可以傳遞引用過它(du'h,你不能引用即將存在的東西,只有存在的東西)。
一旦你這樣做了,你可以指定任何一個值,你的興趣點可以是$year,並且$menu數組中的第二個值會自動跟隨,因爲它只是引用$year變量。

不過,如果您的問題中的代碼段是您正在嘗試執行的所有操作,爲何不使用sprintf?一旦你read through the manual of printf and related functions

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

簡單,:

$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/>'; 
} 

此打印。

+0

僅僅使用上面所做的字符串就不可能在沒有數組的情況下做到這一點? – jmenezes

+0

因爲它不只是一年,還有其他的東西 – jmenezes

+0

@jmenezes:不,因爲你將一個值連接成一個新的字符串。這將創建一個新的字符串,並且字符串不能引用一個變量。它們是_constant_一個字符串是一個字符串,而一個字符串是_constant_。顧名思義,一個變量根據定義是可變的...你可以使用一個數組,或者使用一個格式化字符串和佔位符......這就是他們想要的結果 –

0

這是不可能的。 $year的定義必須在任何使用它的定義之前。

0

程序流的整個概念是,你必須先聲明變量的值,然後才能使用它。還有其他的軟件概念(流程編程),其代碼在其所有輸入都存在之前不會執行 - 但php不是那種語言。

唯一的解決方案是在使用之前初始化$year的值 - 更改語句的順序。

0

如果你想增加一年,那麼這應該做你的工作 $ menu ='查看'.date('Y')的檔案; 並且不可能在聲明前使用變量