2017-10-30 5 views
-2

私は完全に「異なる」解決策を探しているわけではないので、私のコードでこのようにしなければなりません。 なぜグローバル変数に入力した値が格納されていないのですか?値をグローバルに格納するPHP呼び出し関数が目的の値を返しません

EDIT:関数の中にifを入れるのを忘れていたので、「間違っている」という代入はグローバルに行われました。 これは動作しています。

<?php 
$track;$cat;$title; 

function storeData($track, $cat, $title){ 
    $GLOBALS['track']=$track; 
    $GLOBALS['cat']=$cat; 
    $GLOBALS['title']=$title; 
    print 'inside function:'; 
    print $GLOBALS['track']; 
    print $GLOBALS['cat']; 
    print $GLOBALS['title']; 
    return array($GLOBALS['track'],$GLOBALS['cat'],$GLOBALS['title']); 
} 

function getData($track, $cat, $title){ 
    return array('track'=>$GLOBALS['track'],'cat'=>$GLOBALS['cat'],'title'=>$GLOBALS['title']); 
} 

$a=1; 
if ($a==1) { 
    test($a); 
} 

function test($a){ 
    $track='correct track '; 
    $cat='correct cat '; 
    $title='correct title '; 
    storeData($track, $cat, $title); 
    print 'storing this data:'; 
    print $track; 
    print $cat; 
    print $title; 
    $cat='wrong'; $track='wrong'; $title='wrong'; 
    $getting=getData(); 
    $t=$getting['track']; 
    $c=$getting['cat']; 
    $e=$getting['title']; 
    print 'reading back this data:'; 
    print $t; 
    print $c; 
    print $e; 
} 
?> 

出力:あなたが関数から配列を返すとき

inside function:correct track correct cat correct title 
storing this data:correct track correct cat correct title 
reading back this data:correct track correct cat correct title 
+1

ああ、私は現在の$ track、$ cat、$ title値をgetDataからオーバーライドして、それを印刷したいと考えています。 –

+0

@RizkiHadiaturrasyid、ここで私の答えをチェックしてください。 –

+0

@HimanshuUpadhyay彼はすでに自動的にあなたの答えが掲載されたことを通知されているので、あなた自身で行う必要はありません。 – sidyll

答えて

1

、あなたが返さ$ GLOBALS値を持つローカル変数をバックに割り当てられなければなりません。このように

$cat='wrong'; $track='wrong'; $title='wrong'; 
$returned_array = getData($track, $cat, $title);//read global var 
$track = $returned_array[0]; 
$cat = $returned_array[1]; 
$title = $returned_array[2]; 
// then you print these variables 

print 'reading back this data:'; 
print $track; 
print $cat; 
print $title; 
+0

なんらかの理由で、代わりに空白が表示されます( 'このデータを読み取った後:')。 –

+1

返された配列には名前付き要素がありません。 – sidyll

+0

@RizkiHadiaturrasyid、私は自分の答えを更新しました。それを指摘していただきありがとうございます。 –

0

これは、getData関数が返す変数を保存していないためです。

$cat='wrong'; $track='wrong'; $title='wrong'; 
getData($track, $cat, $title); 
print 'reading back this data:'; 
print $track; 
print $cat; 
print $title; 

あなたは関数を呼び出すだけで、変数を保存しておらず、返される変数は保存しません。

1

あなたの関数getData()は配列を返しますが、返された値は決して使用されません。正しいデータが含まれています。 、あなたは関数は、それ自体で、変数に割り当てるしかし、もし

list($track, $cat, $title) = getData(); 

function getData() 
{ 
    return [ 
     $GLOBALS['track'], 
     $GLOBALS['cat'], 
     $GLOBALS['title'] 
    ]; 
} 

$data = getData(); 

$track = $data[0]; 
$cat = $data[1]; 
$title = $data[2]; 

それともすっきり割り当てのために、list()を使用します。そして、この場合には、あなたは実際にすべての引数を必要としませんPHP関数はデフォルトでは値渡しとなっています。引数を渡すと、値のコピーが渡されます。参照を渡すには、次のようにすることができます。

function getData(&$track, &$cat, &$title) 
{ 
    $track = $GLOBALS['track']; 
    $cat = $GLOBALS['cat']; 
    $title = $GLOBALS['title']; 
} 

getData($track, $cat, $title); 

これで変数が変更されます。

関連する問題