2013-12-09 24 views
1

我需要運行在由人不知道,一個變量應該在使用前初始化用PHP寫的一些網頁..超級英雄PHP代碼重構:如何初始化變量

所以我有成千上萬的線,以確保檢查我沒有具有$酒吧未初始化的問題,這樣的事情

<?php 
    $foo = $bar . "I m a noob"; 
?> 

,當然還有。 的問題是,我有大約20〜50個變量在這種情況下,25個文件..

你知道任何超級英雄的方式設置所有的變量「」或空? 我不想設置警告級別爲E或W ..這太糟糕了。

提前致謝!使用陣列具有用於

for ($i = 0; $i < 25; $i++) { $bar[$i] = ''; /* you can change the "" to null */ } 

,可以設置VARS的大量與diferente值,或具有相同值:

+0

有沒有超人類的方式我所知道的。只要留意你的** error_log **文件中關於未定義變量的警告,並在遇到它們時修正它們,並確保在將來編寫的代碼中使用之前定義了任何變量。 –

+0

是馬丁,這是一個辦法,但我花了已30分鐘,只爲4頁-_-仍然有20到去.. – Dax

+1

你應該在兩個和一個半小時這樣的速度可以做到,那麼,) –

回答

1

理論上這個代碼在腳本的開始做這項工作:

$code = file_get_contents(__FILE__); 
preg_match_all('/(?<=\$)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $code, $matches); 
$variables = array_unique($matches[0]); 
foreach ($variables as $variable) { 
    if (!isset($$variable)) { 
     $$variable = null; 
    } 
} 

正則表達式是從PHP site

編輯

乾淨,快捷的方式,沒有一個正則表達式:

$code = file_get_contents(__FILE__); 
$tokens = token_get_all($code); 
foreach ($tokens as $token) { 
    if (is_array($token) && $token[0] == T_VARIABLE) { 
     $variable = ltrim($token[1], '$'); 
     if (!isset($$variable)) { 
      $$variable = null; 
     } 
    } 
} 
+1

據官方消息!其他人請投票給這個傢伙,它爲我節省了相當一段時間。 thanxx @edakos。 – Dax

-3

可以使用用於25的陣列。

+0

這是不可能的,$酒吧是不是一個數組而是一個variable.and甚至$酒吧是一個數組,如果該索引是一個整數你是一天我的超級英雄的下面這段代碼只做工作... – Dax