2

これが私の小さなスクリプトです。これを書いているうちに、PHP が変数をどのように処理するのかまったくわからないことがわかりました...

<?php 
$var = 1;

echo "Variable is set to $var <br />";

if (!foo()) echo "Goodbye";

function foo()
{
    echo "Function should echo value again: ";

    if ($var == 1)
    {
        echo "\$var = 1 <br />";
        return true;
    }

    if ($var == 2)
    {
        echo "\$var = 0 <br />";
        return false;
    }
}     
?>

したがって、このスクリプトがどのように解釈されると私が考えたかは次のとおりです。

  • ステートメントif (!foo)が実行されfoo()ます。関数が を返した場合false、最後に「Goodbye」もエコーします。

  • この関数は、または(データ型について厳密ではありません)foo()かどうかをチェックします。1 の場合、「関数は再び値をエコーする必要があります: 1」とエコーし、2 の場合、同じことをエコーし​​ますが、番号は 2 です。$var == 12

何らかの理由で、両方のif ステートメントfoo()が渡されています (最初の if ステートメントを に変更するif ($var != 1)、. $var = 1

ここで何が起こっているのですか?これで全部落ちたと思っていたのに、今は逆戻りしたような気がします :/

4

2 に答える 2

5

The function doesn't know what $var is. You'd have to pass it in, or make it global:

function foo() {
  global $var;
  /* ... */
}

Or

$var = 1;
if ( !foo( $var ) ) echo "Goodbye";

function foo ( $variable ) {
  /* Evaluate $variable */
}

By the way, it's almost always better to avoid global variables. I would encourage you to go the latter route and pass the value into the function body instead.

于 2012-05-23T23:35:13.447 に答える
0

可変スコープのマニュアルページを読むことを強くお勧めします。$var関数には見えないためfoo()、その内部では未定義です。

于 2012-05-23T23:38:17.627 に答える