2017-01-03 11 views
0

私は自分のPHPページの冒頭で呼び出された関数を持っていますが、これはPHPのブロックで呼び出されていますが、HTML形式では呼び出されていません。 PHP関数のスコープはどのくらいですか、htmlフォームに含めるためにどのように拡張できますか?PHP関数のスコープ:どのように拡張するのですか?

私のコードの例を次に示します。 編集:これは私の実際のコードではありません。機能の範囲がどこに届かないのかを単純に示しています。

<?php 
function foo(){ 
    $x = 1; 
    return $x; 
} 

if (isset($_POST['submit1']) and ! empty($_POST['submit1'])){ 
    $x = foo(); 

} 
?> 

<div> 
    <form action="" method="POST"> 
     <input type='submit' name='submit1' value='Submit'> 
    </form> 
</div> 
<div> 
    <form action="" method="POST"> 
     <?php 
     $x = foo(); 
     echo "<input type='text' value='".$x."'>"; 
     ?> 
     <input type='submit' value='Submit' name='submit2'> 
    </form> 
</div> 

関数の最初のインスタンスは呼び出されますが、2番目のインスタンスは呼び出されません。誰かがなぜ私に説明することができますか? 2番目の形式で関数を再度作成する必要があるのですか、最初の関数の範囲を拡張する方法があります。 ありがとうございました!

編集:これは、リンクされた質問のような関数内の関数ではありません。これは私が元の関数にアクセスしたい別のPHPインスタンスです。

+0

'$ x'の初期値は何ですか?' foo() 'に' $ x'をどう設定するのですか? – developer

+0

何でもかまいません。私の場合は、私の場合、実際には配列の中に配列 – Adina

+0

があり、 '<?php$ x = foo(); ?>「そうですか? – developer

答えて

2

$ xの値が最初の$ xにあっても、常に未定義(注意:未定義のインデックス)であるため、コードは少し混乱します。

function foo(){ 
    return $x; 
} 

外部のスコープはアクセスされません。

function foo($x){ 
    return $x; 
} 

又は

function foo() use ($x) { 
    return $x; 
} 

又は

function foo(){ 
    global $x; 
    return $x; 
} 

...外側範囲がアクセスされます。

+0

これは' global'と 'use'を使っているので、私はこの答えが好きです。これはPHP5とPHP 7でうまく動作します。私はこの答えをお勧めします。 –

+1

@OlafErlandsenグローバルは[恐ろしいアイデア]です(http://stackoverflow.com/documentation/php/194/variables/2496/global-variable-best-practices) – Machavity

+0

はい@Machavityですが、この回答には4つのスコープがあります。 ) –

関連する問題