2014-04-08 43 views
0

我正在創建一個動態編碼的if語句,它是基於從網站訪問者提交的值構建的。 if語句代碼被內置到$ if_statement變量,就像這樣:PHP - 一個動態編碼的if語句來解析XML

$keyword = trim($_GET["Keyword"]); 
if (!empty($keyword)) { 
$if_statement = ($keyword == $Product->keyword); 
} 

$shopByStore = $_GET["store"]; 
if (!empty($shopByStore)) { 
$if_statement = ($if_statement && $shopByStore == $Product->store); 
} 

// plus 7 more GET methods retrieving potential user input for the $if_statement variable. 

這個if語句代碼將被用於分析在foreach循環中一個非常大的XML文件,所以我想if語句是動態編碼PRIOR到foreach循環執行。由於在if語句中測試的條件可能有1到9個之間(取決於有多少GET方法從用戶輸入中產生空變量),因此在系統上測試空變量只需要一次(在foreach之前循環執行)比在foreach循環的EVERY循環期間測試空變量要多。當只有1或2個條件需要測試時,測試9個條件是浪費。

但顯然是因爲$ if_statement是在foreach循環執行之前構建的,所以導致動態if語句代碼的'Product-> variable'部分不被評估。所以什麼都沒有顯示在下面的foreach循環:

$XMLproducts = simplexml_load_file("products.xml"); 
foreach($XMLproducts->product as $Product) { 

if ($if_statement) { // the problem lies here 
echo $Product->name; 
}} 

是否有搭建的方式動態創建的如果解析XML之前foreach循環執行的語句?

回答

0

不,如果您依賴$ Product變量,則無法在訪問它之前創建基於它的語句。這應該是非常簡單的。

if($Product->something) {} //this is meaningless and will throw and error 
//if you define $Product->something here 

你只需做你if_statement在環路和開銷neglieable ...

+0

這就是我的想法。謝謝!即使被解析的XML文件非常大(5-7mb),檢查9個變量是否爲空(在每個循環中)對於內存消耗,資源使用情況和代碼處理的簡便性都不會「不友好」。 –

+0

不,在現階段根本不考慮表現。生產應用程序比這更復雜許多倍,它們運行得很好。所有邪惡的禍根都是成熟的優化,當它慢時就開始優化;) – Feras