2012-06-10 5 views
0

У меня есть класс PHP под названием ResetPassword. Внутри этого класса есть переключатель, который будет возвращать другую строку, содержащую требуемый 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 ничего не отображается. var_dump на $ displayblock возвращает NULL.

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

Если я вызываю любой из других случаев (ранее пропущенных), он возвращает требуемый HTML.

Может ли кто-нибудь увидеть то, что мне не хватает здесь? Любая помощь, как обычно, будет принята с благодарностью.

EDIT: Я обновил переключатель, как указано ниже, чтобы оператор возврата находился за пределами коммутатора. Конечный результат все тот же. Я также изменил случай по умолчанию, чтобы вернуть строку («abcd»), чтобы убедиться, что случай по умолчанию не был вызван, и это не было. Все еще возвращается NULL.

+2

Также вы должны отделить свой html от своей основной логики. Используйте метод класса шаблона для загрузки блока html. –

+0

Ваш образец кода [работает для меня] (http://codepad.viper-7.com/4qGHyq). – nickb

+0

Ваш пример кода работает нормально, только проблема с функцией, которую я должен исправить, чтобы запустить ее, - get_display_block - мне нужно закрыть функцию дополнительной фигурной скобкой «}». – Dharmavir

ответ

1

Вы не должны использовать оператор 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; 
} 

Update

ли эту работу:

<?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 didnt. Очень странно. Большое спасибо за вашу помощь, очень ценю. – 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

Нет нисходящего от меня? Спасибо за ответ. Я попробую это как функцию, а не класс, и посмотрим, поможет ли это, еще раз спасибо. – Nik

+0

-1 Преобразование вашего класса в функцию определенно не является решением. –

0

Я нашел решение, и смущающе, что ошибка не была в переключателе или в том, как я называл это. У меня есть файл конфигурации, который включен в каждую страницу (не упоминал, так как не думал, что это имеет значение), который я забыл добавить в класс.

То, что меня так долго путало, это то, что я бы не подумал, что другие случаи в коммутаторе тоже будут работать, но они это сделали ... О, хорошо.

Спасибо всем, кто ответил.

Смежные вопросы