2012-12-14 32 views
2

我對整個編程的事情相當陌生,所以請原諒我,如果這是一個愚蠢的問題。看起來很奇怪,我以前沒有遇到過它。我的IF語句正在改變PHP中的變量

我正在嘗試爲一個蛋糕作出訂單。您填寫表格並提交,然後它會在新窗口中顯示訂單,然後點擊「提交」,然後將其上傳到數據庫。在提交之前,我有一系列If語句來檢查表單中的錯誤。這是代碼的簡化版本。寫作意味着你想在蛋糕上寫下任何你想寫的東西,名字就是你的名字,而蛋糕就是你想要的蛋糕類型(默認爲「無」)。

try { 
$name = trim($params->name); 
$cake = trim($params->cake); 
$writing = trim($params->writing); 
if (strlen($name) < 3){ 
    throw new Exception("Please enter Your name."); 
    } 
if ($cake = "None") { 
     throw new Exception("Please select a Cake" 
    } 
if ($cake = "Caramel Apple Pie" or $cake = "Pumpkin Pie" or $cake = "Eggnog Pie" and strlen($writing) > 1) { 
    throw new Exception("We are sorry, but you can't write on any of our specialty pies."); 
    } 

} catch(Exception $x) { 
    $error = $x->getmessage(); 
    } 

所以發生的是,當我去擊中提交的第一次,正確的蛋糕類型來了,但是當你提交的第二次,錯誤出現說我有「無」選擇。所有其他值都在那裏並保持不變。我認爲問題在於,第一個「IF」聲明(它說「If($ cake =」None「))會自動將$ cake更改爲」None「,因爲我已經嘗試對該聲明進行評論,然後它會改變蛋糕是「焦糖蘋果餡餅」,這是在未來的IF語句的頂部。

任何人都知道它爲什麼這樣做?以及如何解決它?

+0

單個等於是分配。雙等於檢查平等。 – ceyko

回答

5

您使用的是=代替的==

  • =是賦值運算符,即它改變了我們的變量的值。使用它的一個內10 -statement會導致設置變量並檢查結果。
  • ==是一個比較操作
  • ===也是比較運算符,它另外檢查類型是否相等。

查看PHP assignment operatorcomparison operator手冊以獲取更多信息

其他注意事項:

  • throw new Exception("Please select a Cake"缺少);爲好。
  • 使用異常寫入消息$error在您的示例情況中有點矯枉過正!例如,只需使用$error = "Please enter Your name."即可。
+0

謝謝!我知道這一點,但由於某種原因,我完全忘記了寫這個程序。我是比較新的,所以我會犯錯。 – user1902509

0

問題是您正在使用賦值運算符。你的代碼改成這樣:

if($cake == "None") 

=運營商:

在問題語言=表示分配。您正在爲特定變量分配一個值。

I.E. 
$truck = "Ford"; 
//$truck has now been assigned the value of "Ford" 

==運營商:

==被稱爲相等。這將檢查您正在比較的值和/或變量是否相等。

I.E. 
$truck = "Ford"; 
if($truck == "Ford") //returns true 
1

=被賦值。 ==是一個平等的測試。

有些程序員編寫他們平等的測試這樣趕上這個錯誤:

if ('foo' == $x) 

,因爲如果你有這樣的

if ('foo' = $x) 

這是一個語法錯誤,因爲你不能分配$x一個字符串文字。

+0

由於缺少'=',我特別痛苦地擰上了這個風格。絕對值得推廣,所以+1。 – MichaelRushton

+0

我個人覺得這很難閱讀,特別是如果lhs是一個長長的方法調用鏈。任何體面的編譯器或代碼分析器都應該在if語句中產生一個關於賦值的警告。另外請注意,在某些語言中這是一種常見的習慣用法,比如ruby。 – ceyko