2012-06-10 88 views
0

我有一個名爲ResetPassword的PHP類。在這個類中是一個開關,它將返回一個包含所需HTML的不同字符串。PHP開關按預期工作

這是下面的代碼(我省略了一些病例爲簡潔起見,也有它返回NULL默認情況下)

public function get_display_block($displayblock) { 
    switch ($displayblock) { 
    case 'EnterNewPassword': 
     $displayblock = ' 
         <form action="resetpassword.php" method="post"> 
         <fieldset class="login"> 
         <legend>Enter your information in the form below to reset your password: </legend> 
         <div><label for="password1">Password :</label> 
         <p><input type="password" name="password1" size="40" maxlength="60" /></p> </div> 
         <div><label for="password2"><span class="required">*</span>Retype Password :</label> 
         <p><input type="password" name="password2" size="40" maxlength="60" /></p> </div> 

         <br /> 
         </fieldset><br /> 
         <br /> 
         <div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div> 
         </form> 
         '; 
      return $displayblock; 
     break; 

    case 'THIS_ISNT_WORKING': 
     $displayblock = ' 
         <form action="changepassword.php" method="post"> 
         <fieldset class="login"> 
         <legend>Enter your information in the form below to reset your password: </legend> 
         <div><label for="password1">Old Password : </label> 
         <p><input type="password" name="oldpassword" size="40" maxlength="60" /></p> </div> 
         <div><label for="password1">New Password :</label> 
         <p><input type="password" name="password1" size="40" maxlength="60" /></p> </div> 
         <div><label for="password2"><span class="required">*</span>Retype New Password :</label> 
         <p><input type="password" name="password2" size="40" maxlength="60" /></p> </div> 

         <br /> 
         </fieldset><br /> 
         <br /> 
         <div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div> 
         </form> 
         '; 
     return $displayblock; 
    break; 
} // end of switch 

} //end of method 

當調用我的主類/開關下面的代碼工作正常。

$reset = new ResetPassword(); 
$displayblock = $reset->get_display_block('EnterSecretAnswer'); 

但是,當試圖調用THIS_ISNT_WORKING時什麼都不顯示。 $ displayblock上的var_dump返回NULL。

$reset = new ResetPassword(); 
$displayblock = $reset->get_display_block('THIS_ISNT_WORKING'); 
var_dump($displayblock); 

如果我打電話給任何其他情況(以前省略的),它將返回所需的HTML。

任何人都可以看到我在這裏失蹤的東西嗎? 像往常一樣的任何幫助將不勝感激。

編輯:我已經按照下面的要求更新了開關,以便返回語句在開關外。最終結果仍然是一樣的。 我也改變了默認情況下返回一個字符串(「abcd」)只是爲了驗證默認情況下不被調用,並沒有。仍然返回NULL。

+2

此外,你真的應該從你的核心邏輯分離你的HTML。使用模板類方法來加載你的html塊。 –

+0

您的示例代碼[適用於我](http://codepad.viper-7.com/4qGHyq)。 – nickb

+0

您的示例代碼工作正常,唯一的問題與我必須糾正,使其運行的函數get_display_block - 我必須通過一個額外的花括號「}」關閉功能。 – Dharmavir

回答

1

您不應該在switch中使用return語句。根據我的知識,基本上使用return聲明在函數中被稱爲良好實踐。

+2

...因爲?什麼道理呢?好處,警告,例外,任何事情?如果你可以保持[複雜度下降](http://en.wikipedia.org/wiki/Cyclomatic_complexity),我認爲沒有理由在方法中使用多重返回。 –

+0

@MikeB:是的,但除了這條規則之外,一般的說法(我認爲每個人在創建一個新函數時都以它開頭)是這樣,所以在函數的最後一行返回。所以一旦結束是恕我直言的一個很好的起點。 – hakre

1
public function get_display_block($displayblock) { 
switch ($displayblock) { 
    case 'EnterNewPassword': 
     $displayblock = ' 
        <form action="resetpassword.php" method="post"> 
        <fieldset class="login"> 
        <legend>Enter your information in the form below to reset your password: </legend> 
        <div><label for="password1">Password :</label> 
        <p><input type="password" name="password1" size="40" maxlength="60" /></p> </div> 
        <div><label for="password2"><span class="required">*</span>Retype Password :</label> 
        <p><input type="password" name="password2" size="40" maxlength="60" /></p> </div> 

        <br /> 
        </fieldset><br /> 
        <br /> 
        <div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div> 
        </form> 
        '; 
    break; 

    case 'THIS_ISNT_WORKING': 
     $displayblock = ' 
        <form action="changepassword.php" method="post"> 
        <fieldset class="login"> 
        <legend>Enter your information in the form below to reset your password: </legend> 
        <div><label for="password1">Old Password : </label> 
        <p><input type="password" name="oldpassword" size="40" maxlength="60" /></p> </div> 
        <div><label for="password1">New Password :</label> 
        <p><input type="password" name="password1" size="40" maxlength="60" /></p> </div> 
        <div><label for="password2"><span class="required">*</span>Retype New Password :</label> 
        <p><input type="password" name="password2" size="40" maxlength="60" /></p> </div> 

        <br /> 
        </fieldset><br /> 
        <br /> 
        <div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div> 
        </form> 
        '; 
     break; 
    } 

    return $displayblock; 
} 

更新

這是否工作:

<?php 

    $reset = new Reset; 
    $displayblock = $reset->get_display_block('THIS_ISNT_WORKING'); 
    var_dump($displayblock); 

    class Reset{ 
    public function get_display_block($displayblock) { 
    switch ($displayblock) { 
     case 'EnterNewPassword': 
      $displayblock = ' 
       <form action="resetpassword.php" method="post"> 
       <fieldset class="login"> 
       <legend>Enter your information in the form below to reset your password: </legend> 
       <div><label for="password1">Password :</label> 
       <p><input type="password" name="password1" size="40" maxlength="60" /></p> </div> 
       <div><label for="password2"><span class="required">*</span>Retype Password :</label> 
       <p><input type="password" name="password2" size="40" maxlength="60" /></p> </div> 

       <br /> 
       </fieldset><br /> 
       <br /> 
       <div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div> 
       </form> 
       '; 
     break; 

     case 'THIS_ISNT_WORKING': 
     $displayblock = ' 
       <form action="changepassword.php" method="post"> 
       <fieldset class="login"> 
       <legend>Enter your information in the form below to reset your password: </legend> 
       <div><label for="password1">Old Password : </label> 
       <p><input type="password" name="oldpassword" size="40" maxlength="60" /></p> </div> 
       <div><label for="password1">New Password :</label> 
       <p><input type="password" name="password1" size="40" maxlength="60" /></p> </div> 
       <div><label for="password2"><span class="required">*</span>Retype New Password :</label> 
       <p><input type="password" name="password2" size="40" maxlength="60" /></p> </div> 

       <br /> 
       </fieldset><br /> 
       <br /> 
       <div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div> 
       </form> 
       '; 
      break; 
     } 

    return $displayblock; 
    } 


} 

它返回給我一個非空響應。

+0

已更新代碼以反映此情況(即移動了交換機的返回側)。仍然返回NULL。但感謝您的答案。 – Nik

+1

已更新的答案。 –

+0

我發現錯誤,我沒有在我的配置文件中包含ResetPassword.php。我原以爲,因爲它不包括在內,所以調用「'EnterNewPassword'」將不起作用,但由於某種原因,EnterNewPassword返回了THIS_ISNT_WORKING的意思。很奇怪。非常感謝您的幫助,非常感謝。 – Nik

-1

使用方法如下

function get_display_block($displayblock) { 
    switch ($displayblock) { 
     case 'EnterNewPassword': 
      echo '<form action="resetpassword.php" method="post">' . 
       '<fieldset class="login">' . 
       '<legend>Enter your information in the form below to reset your password: </legend>' . 
       '<div><label for="password1">Password :</label>' . 
       '<p><input type="password" name="password1" size="40" maxlength="60" /></p> </div>'. 
        '<div><label for="password2"><span class="required">*</span>Retype Password :</label>'. 
        '<p><input type="password" name="password2" size="40" maxlength="60" /></p> </div>'. 
        '<br />'. 
        '</fieldset><br />'. 
        '<br />'. 
        '<div align="center"><input type="submit" name="submit" value="Submit My Information!" \></div>'. 
        '</form>'; 
      break; 
     } 
} 

而就在做同樣的你的其他案件。雖然這樣做可能會有點傾斜,但你只需要使用它然後在你的腳本通過呼籲<? get_displaying_block($yourString); ?>

+0

對不起,有一個大括號丟失,簡單的錯誤,因爲我把它扔在一起,只是爲了讓他知道他需要做什麼的基本想法。 – Bobby

+0

從我這裏沒有downvote?感謝你的回答。我會嘗試它作爲一個功能,而不是一個班級,看看是否有幫助,再次感謝。 – Nik

+0

-1將您的課程轉換爲函數絕對不是解決方案。 –

0

我找到了解決方案,令人尷尬的錯誤不是在交換機或我的方式被稱爲它。 我有一個配置文件,其中包含每個頁面(沒有提及,因爲沒有認爲這是相關的),我忘了添加類。

讓我困惑的事情這麼長時間以來,我不會想到交換機中的其他情況也會起作用,但他們確實......哦。

感謝大家回答。