4

で定義された関数を持つcommons.php

desktop.php -> include commons.php
    |
    |
   \|/
    include MODULES.'mod.php'

カスタム関数はどこでも呼び出すことができますが、if内にある出口内では呼び出すことができません。関数を呼び出さないコード:

Mod.php:

....
$error = mysql_error();

if($_ADM['id_user']==1) {
    if(!empty($error)) {
        $debug = array(
                    'message' => "SQL Error in infography_edit module.",
                    'line'    => '79',
                    'error'   => $error,
                    'SQL'     => $SQL
                );
        //exit(myPrint($debug)); //Calling here myPrint does not work
          exit(print_r($debug)); //This works
     }
 }

 $test = array('alex');
 exit(myPrint($debug)); //Calling here myPrint works

....

// The output error: Call to undefined function myPrint()

上記のコードの外側の他の場所が機能する理由を理解することはできませんが、コードの内側で再度定義しないと内部では機能しません

アップデート

このようにすると、どちらも機能しないようです。

myPrint($debug);
exit();
// The output error: Call to undefined function myPrint()

UPDATE2

desktop.phpメインファイル:

  1. require(LIBS.'commons.php');
  2. 一般的なhtml
  3. モジュールを含める

デスクトップのコードを含むコードパッド:http://codepad.org/hn8QlHQ9

4

5 に答える 5

1

回避策はどうですか

function my_exit($msg){
   echo $msg;
   exit(1);  //Return code of the script, useful for cli scripts
}

//...
my_exit("Show message");
//...
于 2012-07-16T08:17:39.847 に答える
0

条件付き基準が満たされていることを前提として、コードは機能するはずです。

未定義の関数myPrint()の呼び出し

上記のエラーは、関数myPrint()が定義されていないことを示しています。function_exists()関数を使用して、特定の関数が終了するかどうかを確認できます。存在しない場合は、現在のコンテキストで再定義できます。

<?php
if (function_exists('myPrint')) {
    echo "myPrint() exists.\n";
} else {
    echo "myPrint() doesn't exist.\n";
}
?> 
于 2012-07-11T16:47:22.113 に答える
0

exit()intタイプとのスカラー値のみを受け入れることができる言語構造stringです。スクリプトを終了する前に何かを印刷する必要がある場合は、exitが呼び出される前に印刷することをお勧めします。

....
$error = mysql_error();

if($_ADM['id_user']==1)
    if(!empty($error))
        $debug = array(
                    'message' => "SQL Error in infography_edit module.",
                    'line'    => '79',
                    'error'   => $error,
                    'SQL'     => $SQL
                );
        myPrint($debug);
        exit();
....
于 2012-07-11T16:49:32.533 に答える
0

万が一、名前空間を使用していますか?関数が定義されていますか?含まれている場合は、含まれていますか?

PS RobB申し訳ありませんが、機能します。

例:

$v = 1234;
function xyz($v){
    echo $v . 23;
}
exit( xyz($v) );
于 2012-07-11T16:52:25.463 に答える
0

さて、まず最初に、私が取り組んでいるコードが私のものではないことを明確にする必要があります。私はいくつかの改善を行うために雇われ、その混乱を説明するためにメインの開発者と話をしなければなりませんでした。

私が見逃し続けていたのは、すべてのリクエスト(ページの更新に関係するすべてのリクエスト)が呼び出されたセカンダリファイルを通過し、do.php最終的に私がいたモジュールを再度ロードしたことです。

視覚的な説明:

Currently at          Action                Pre-Processor        Processor 
-------------    =>   ---------------   =>  -------------    =>  ---------
add_users.php         post from form        do.php               add_user.php

さて、ご存知のとおり、現在のモジュールの場所(http://site.com/module?=add_users)はセッションに保存され、do.phpそのセッションをチェックし、すべて問題がなければモジュールを含めるための数行のコードが含まれています。私はそれが大きな混乱であることを知っています、しかし私はそれについて何もすることができません。

したがって、最終的にはdo.php、ファイルの先頭に次の行を追加する必要がありました。require_once('libs/commons.php');

 

私の推薦

関数が読み込まれないことがわかっても、特定の場合に完全に読み込まれることがわかっている場合は、do.php上記のように干渉する可能性のある他のファイルを探し、関数を含むファイルを含める/要求してみてください。

私はそのようなことが頭痛の種になることを知っていますが、それはそれが何であるかであり、ほとんどの場合、私たちのせいではなく、プラットフォームがすでに書かれた方法です。

皆さんお元気で

于 2012-08-08T19:27:49.423 に答える