0

ResetPassword という PHP クラスがあります。このクラス内には、必要な HTML を含む別の文字列を返すスイッチがあります。

これは以下のコードです (簡潔にするためにいくつかのケースを省略しました。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 が返されます。

ここで私が見逃しているものを見ることができますか? いつものように助けていただければ幸いです。

編集: return ステートメントがスイッチの外側になるように、以下のようにスイッチを更新しました。最終結果はまだ同じです。また、デフォルトのケースが呼び出されなかったことを確認するためだけに、文字列 ("abcd") を返すようにデフォルトのケースを変更しました。まだ NULL を返します。

4

4 に答える 4

1

returnswitch 内でステートメントを使用しないでください。基本的returnに、関数内でステートメントを 1 回使用することは、私の知る限り、良い習慣として知られています。

于 2012-06-10T04:51:02.700 に答える
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;
   }


}

null 以外の応答を返します。

于 2012-06-10T04:52:31.553 に答える
0

私は解決策を見つけました、そして恥ずかしいことにエラーはスイッチまたは私がそれを呼んでいた方法にありませんでした。クラスを追加するのを忘れていたすべてのページに含まれている構成ファイルがあります(関連性があるとは思わなかったので言及しませんでした)。

長い間私を混乱させたのは、スイッチの他のケースも機能するとは思わなかったということですが、それらは機能しました。

答えてくれたみんなありがとう。

于 2012-06-10T08:16:04.813 に答える
-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); ?>

于 2012-06-10T04:57:07.513 に答える