1

これが私のコードです:

    if (ismobile()) {
        // Include mobile version of this page
        require_once("mobile_signup.php");

        // Die so it will not include desktop version below mobile version
        die();
    }
    function this_is_a_function() {
        // Some code here
    }

   // Desktop version of code here

mobile_signup.php にも「this_is_a_function()」という関数が宣言されています。どうすればこれを適切に行うことができますか?「function_exists('this_is_a_function')」があることに気付きましたが、これらのコードの両方に多くの関数があるため、両方のページのすべての関数に対してこれを行うのは現実的ではありません。

このサイトは事前に構築されており、モバイル フレンドリーなサイトに変えようとしています。したがって、スクリプト全体を書き直すのは簡単なことではありません。

4

4 に答える 4

1

すべての関数は解析中にphpシステムに登録されるため、重複関数が動的および条件付きインクルード内にあり、重複関数が来ないことを確認できる場合は問題ありませんが、それらが同じスクリプトまたは1つの実行プロセスにある場合、次に、エラーが発生します。解析時間のエラーを覚えておいてください。

PHPは最初にスクリプトを解析してから実行することを覚えているので、最初に関数が宣言され、次にスクリプトが実行されるためdie()、解析後に実行されます。

関数がグローバル名前空間に宣言されているワードプレスのような環境では、このコーディングスタイルを使用するのが最善の方法です

if (!function_exists('HelloFunc'))
     function HelloFunc(){
         // do
     }

または現在のコードでは、このパターンを使用することをお勧めします

if (ismobile()) {
    // Include mobile version of this page
    require_once("mobile_signup.php");
} else {
    // Include mobile version of this page
    require_once("desktop_signup.php");
}
于 2013-04-03T16:02:47.267 に答える
1

あなたの質問は少し混乱しましたが、モバイル上にあるかどうかに基づいて異なる機能が必要であると想定しています.

これを行うには、モバイルの場合はモバイル機能を備えたページが必要であり、モバイルでない場合は別のページが必要であり、モバイルとその他の両方で使用される機能をメイン ページに保持する必要があります。このようにして、関数が 2 回定義されても問題は発生しません。

ページが互いに関連していないためにこれが機能する必要がある場合は、関数を別の方法で呼び出すのが最も簡単な答えです。

繰り返しますが、あなたの質問は各ページが何をしたか、現在のページが何をしたかなどについて十分に詳しく説明されていなかったため、上記のどれが問題なのかわかりません.

于 2013-04-03T15:58:22.460 に答える
1

モバイル バージョンのファイルをページの先頭に含めた直後に実行する必要がdie()あり、それでも正常に動作することが期待される場合、それはモバイル ファイルが単独でスタンドアロンで実行できることを意味します。したがって、ここではリダイレクトの方が適しています。

header("Location: mobile_signup.php");

die()実行を停止しますが、それをどこかで使用すると、その下のすべてのコードが役に立たなくなり、PHP によって引き続き解析されるという意味ではありません

于 2013-04-03T15:58:43.557 に答える
0

die() は実行中のスクリプトを停止します。die() が検出された行の後に、php パーサーがコードを解析するのを停止しません。ファイルをインクルードすると...パーサーはコードをインクルードした後にそれを完全にコンパイルし、die()はここでは何もしません...

関数が既に存在するかどうかを確認するか、別の関数名を使用する必要があります

于 2013-04-03T16:04:53.457 に答える