0

コードに問題があります。PHPページに同じクラスを2回含めましたが、1つが機能するたびに、他の機能が機能しません。私のコードは私よりもうまく説明できるかもしれません。

<?php
    if($_POST['submit']){
        if(!class_exists('Some_Class'){
            include('Class.php');
            $obj = new Some_Class;
            $obj->Do_something_2();
            }
            unset($obj);
        }
?>
<html>
    <head></head>
    <body>
        <form method="post" action="">
        <?php 
            if(!class_exists('Some_Class')){
            include('Class.php');
            $obj = new Some_Class;
            $obj->Do_something_1();
            }
            unset($obj);
        ?>
            <input type="text" name=""/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>

現在発生している実際の問題は、フォームにいくつかの html フォーム要素をプログラムで追加することです。そして、フォームを送信すると、ポストバックのチェックが少し行われ、ポストバックが設定されている場合は、同じクラスを再度含めますが、クラスで他の機能を実行します.最初にページを更新すると、最初のクラスフォームに含まれているものは正常に機能しますが、フォームを送信すると、ポストバック作業のチェックにクラスが含まれますが、フォーム内のクラスは含まれません。私の問題を解決できたことを願っています。コードを書くこのアプローチに何らかの問題があるかどうか教えてください。

4

4 に答える 4

6

それclass_exists('Some_Class'))は、2回目は真だからです。あなたは移動する必要があります

$obj = new Some_Class;
$obj->Do_something_1();

その条件の外。

より良い解決策はinclude_once、ページの上部にあるクラスです。

さらに良い解決策は、それを自動ロードすることです。

クラスを使用していても、これはまだ手続き型であることに注意してください。

于 2013-01-24T15:36:21.517 に答える
2

クラスが存在するかどうかを 2 回チェックしています。

次のように変更すると、2 番目の呼び出しが機能するはずです。

    <?php 
        if(!class_exists('Some_Class')){
          include('Class.php');
        }

        $obj = new Some_Class;
        $obj->Do_something_1();
        unset($obj);
    ?>

(ブラケットをそのように設定すると、初めての方もうまくいくはずです)

クラスの設定を解除するのではなく、クラスのオブジェクト インスタンスを1 つだけ解除します。

于 2013-01-24T15:36:29.230 に答える
2

問題は、クラスが初めて定義されたときに、その時点から定義されたままになることだと思います。また、 include_once 関数を使用すると、ドキュメントを一度だけ含めるようにすることができます

したがって、ドキュメントの先頭で一度宣言してから使用する必要があります。次に例を示します。

<?php

if(!class_exists('Some_Class'){
    include_once('Class.php');

    }

if($_POST['submit']){            
        $obj = new Some_Class;
        $obj->Do_something_2();
        unset($obj);
    }
?>
<html>
    <head></head>
    <body>
        <form method="post" action="">
        <?php 
            $obj = new Some_Class;
            $obj->Do_something_1();
            unset($obj);
        ?>
            <input type="text" name=""/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>

あなたの側として、元のコードでは条件外で $obj 変数の設定を解除していたことに注意することが重要です。これは、 $obj オブジェクトが範囲外であるため、時々存在しない可能性があるため、警告につながる可能性があります

于 2013-01-24T15:36:58.483 に答える
1

毎回ジェネ​​リックオブジェクトを作成しているようです。これを使って:

<?php
include_once('Class.php');
$obj = new Some_Class;

if($_POST['submit'])
{
    $obj->Do_something_2();
}
?>
<html>
    <head></head>
    <body>
        <form method="post" action="">
            <?php $obj->Do_something_1(); } ?>
            <input type="text" name=""/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>
于 2013-01-24T15:37:52.053 に答える