0

コードがコンピューターでは機能するが、別のコンピューターでは機能しないphpに問題があります

    function appendParam(&$req, $name, $value) {
    if (req == null) {
        return;
    }
    if (name == null) {
        return;
    }
    if (value != null) {
        $req[$name] = $value;
    }
}

上記は1台のコンピューターで機能し、reqとnameをnullに対して適切にチェックできます。変数は、if条件がドル記号を必要としない場合です(このコンピューターでドル記号を挿入すると壊れます)

しかし、同じ最終結果を得るには、別のコンピューターで次のコードを使用する必要があります

    function appendParam(&$req, $name, $value) {
    if ($value != null) {
        $req[$name] = $value;
    }   
    if ($name == null) {
        return;
    }
    if ($req == null) {
        return;
    }
}

この他のコンピューターでは、名前またはreqをnullに対してチェックすることができず(壊れます)、if条件の変数にドル記号が必要です。

ちなみに、このコンピュータは、まだ初期化されていない配列インデックスから読み取ることができないようです。

どんな助けでも大歓迎です

4

4 に答える 4

3

2台のマシンでは、警告レベルまたはエラー報告レベルが異なる場合があります。

私は混乱しています。確かに、php変数名の前に$プレフィックスを付ける必要があります。そうしないと、実際に変数をチェックしていませんか?$プレフィックスを使用しないことで何を達成しようとしていますか

于 2009-07-10T13:40:12.800 に答える
2

このコードは私にはほとんど意味がありません:

    function appendParam(&$req, $name, $value) {
    if ($value != null) {
                $req[$name] = $value;
        }       
    if ($name == null) {
                return;
        }
    if ($req == null) {
                return;
        }
}

次のように書く必要があります。

function appendParam(&$req, $name, $value)
{
 if(empty($name) || empty($value) || empty($req))
  return;

 $req[$name] = $value;
}

あなたがそれを「壊す」と言うとき、あなたはあなたが得ている特定の例/エラーとあなたがその関数をどのように使っているかを与えることができますか?間違って使っていると思います。

于 2009-07-10T13:40:45.717 に答える
1

この問題のデバッグを簡素化するために、尊重すべき多くのベスト プラクティスがあります。これらの BP は、問題をより明確にし、できれば根本的に解決することもできます ...

1) まず、php.ini に一貫性があり、次のパラメータが最適な値に設定されていることを確認する必要があります。

allow_asp_tag = オフ; 通常、そのようなタグは必要ありません short_open_tags = Off ; これにより、xml データ/ドキュメントを操作する際の頭痛が回避されます。 register_globals = Off ; これは4.1より前のデフォルトの悪です log_errors = On ; この 2 行 show_errors = Off ; セキュリティが必要な場合、本番環境では期待できます error_reporting = E_ALL & E_STRICT; これにより、すべてのエラーが表示されます

2) エラー メッセージを切り取るために "@" 演算子を使用しないでください。エラー メッセージは処理する必要があります。さらに、これはパフォーマンスの問題です

3) 条件をテストするための適切な構成要素、演算子、または関数を選択します。IE、変数が「空」ではないことをテストしている場合、空の文字列 ($v=="") に対してテストしないでください。これは一般的に機能するようですが、演算子 == が強制する暗黙のキャストに依存しています。 === 演算子を使用した場合、もちろん、テストはあなたが望んでいたものではありません。

4) ダニエルが指摘したように、関数はより良い方法で書き直される可能性があります。


function appendParam(&$req, $name, $value)
{
    if (empty($name) || empty($value) || empty($req)) {
return; } $req[$name] = $value; }

php ini を変更[したくない|できない]場合は、実行時にログ レベルを設定することをお勧めします。たとえば、デバッグ機能として構成ファイルに設定します。

    error_reporting = E_ALL | E_STRICT;

私の答えは、すべてのエラー報告を完全に有効にすることです。PHP は、何かがおかしいことを教えてくれます。

私の2セント:)

于 2009-07-10T16:18:22.383 に答える
0

コンピューターの 1 つが古いバージョンの PHP を使用している可能性はありますか?

于 2009-07-10T13:34:03.777 に答える