2011-01-13 7 views
4

内部Iが有している変数の使用:のfunctions.phpでPHP:関数

include ('functions.php'); 
check_blocked(); 
echo $blocked; 

を、)(check_blocked。存在する。 check_blocked内部で私が得た:

global $blocked; 
$blocked = '1234'; 

は私が内部check_blockedているブロックされた変数を、$エコーします()。

それは私が私の元のコードを持っていることができないとして、私はちょうど、関数の内部エコーを持っている可能性があると言ういけないしてください、これは私の元の問題の一例である..

を何も出力し、作業をdoesntのはありません。

+0

代わりに['$ GLOBALS'](http://www.php.net/manual/en/reserved.variables.globals.php)を試してみてください。 –

+4

なぜあなたはグローバル関数を使用するように奨励していますか?関数から値を返すだけなのですか? – dqhendricks

+2

$はブロックされましたか?そのため、 'echo check_blocked()'は実際に動作しますか?複数の$ブロックがある場合、配列を使用します。問題はどこですか? – Shoe

答えて

4

あなたのコードはのfunctions.phpあなたはグローバル関数にブロック化する前に、関数のスコープの外でブロックされて定義する必要があります

function check_blocked(){ 
    global $blocked; 
    $blocked = 1234; 
} 

のように見えるで

$blocked = 0; 
include('functions.php'); 
check_blocked(); 
echo $blocked; 

のようになります。

+0

echo $ blockedは0を出力し、1234 ... – Shoe

+0

+1を出力しません。確かに。それ以外の場合、関数内の 'global $ blocked'は何もしません。まだ作成していないので、 '$ blocked'という名前のグローバルは見つかりません! –

+1

@Tomalak Geret'kalはグローバルの使用をupvotingですか?関数から値を返さないのはなぜですか? – dqhendricks

0

変数がcheck_blocked()関数の外部で宣言されていない限り、その変数は宣言できません。

function check_blocked() { 
    global $foo; 
    $foo = "Hello"; 
    // other work 
} 


global $foo; 
echo $foo; // Nothing 

は、その変数がローカルにスコープされ、そして、すぐに機能が完了として廃棄されています。そのような関数の内部で定義された

$foo = null; 

function check_blocked() { 
    global $foo; 
    $foo = "Hello"; 
    // do some stuff 
} 

global $foo; 
echo $foo; // prints "Hello" 

場合。

+0

-1。あなたは 'global'キーワードについて忘れました。 –

+0

うん...ねえ。それで? – Shoe

+0

ああ、そうです。 – minichate

0

あなたは$blockedを返すようにcheck_blocked()を変更したり、使用を試すことができます。

include ('functions.php'); 
check_blocked(); 
global $blocked; 
echo $blocked; 
+1

-1。え?それはすでにグローバルな範囲に入っています。そこに「グローバル」と書くのはなぜですか?ナンセンス。 –

0

を代わりに、戻り値を使用します。グローバルは悪いです。

include ('functions.php'); 
echo check_blocked(); 

function check_blocked() { 
    return '1234'; 
} 
+0

有効なやり方はありますが、可変スコープのポイントと実際にグローバル変数を使用する方法は異なります。 –

+0

@ Geoffrey Wagner彼は実際にグローバルまたはスコープについて何も尋ねていません... OPの質問は、関数が実行された後に関数内に作成された変数をエコーする方法でした。なぜ彼らが最良の方法を理解するのを助けないのですか? – dqhendricks

+0

私はあなたの意見を完全に見て、私は評価を下げていませんが、なぜ彼らに言い聞かせるのではなく、彼らの方法の誤りを見せてください。人に魚を与えて永遠に彼に食べさせるように教えてくださいIMO –

4

なぜ値を返さないのですか?可能な限り

function check_blocked() { 
    $blocked = '1234'; 
    return $blocked; 
} 

その後、

include ('functions.php'); 
echo check_blocked(); 

はglobalesを避けてください。

+1

+1。グローバルは避けるべきです。これは正しい方法です。 – mfonda

+0

@mfonda何かを行うための "正しい"方法は1つではありません。 –

+0

私たちは、彼のテストケースの背後にある実際のシナリオについて十分に知りません。これは実際には適切ではないかもしれません。元のテストケースから離れすぎてしまったと感じます。しかし、downvoteはありません。 –