2010-08-04 45 views
0
<?php function curl($mail){ 

    $go = curl_init(); 
    $access_token = '1234567890|5fabcd37ef194fee-1752237355|JrG_CsXLkjhcQ_LeYPU.'; 
    curl_setopt($go, CURLOPT_URL,'https://graph.facebook.com/search?q='.$mail.'&type=user&access_token='.$access_token); 
    curl_setopt($go, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"); 
    curl_setopt($go, CURLOPT_POST, 0); 
    curl_setopt($go, CURLOPT_HEADER, 0); 
    curl_setopt($go, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($go, CURLOPT_SSL_VERIFYPEER, false); 
    $json = curl_exec($go); 
    curl_close($go); 

    $arr = json_decode($json,1); 
    if(isset($arr['data']['0']['id'])) { 
     return $arr['data']['0']['id']; 
    } else { 
     return false; 
    } 
} ?> 

我把$name = $arr['data']['0']['name'];return $arr['data']['0']['id'];上述但是我不能運行$a = curl($mail);函數中的變量不能被看出來嗎?

+1

我不能看到'$名稱= $改編[ '數據'] [0] [ '名'];'你的功能。 – Sarfraz 2010-08-04 09:48:36

+1

請顯示完整的代碼。 – 2010-08-04 09:49:08

+1

呃... $ name變量是什麼? (在上面的代碼片段中,似乎沒有這個名字的變量。) – 2010-08-04 09:49:21

回答

1

除非你在更新一個全局變量(它的使用是不是最好的做法),只有這樣,才能「獲得」一個變量的函數內的當前/方法如果函數/方法返回所需的值或通過引用接受變量作爲參數並更新變量。

即:

// curl returns the required value. 
$name = curl('[email protected]'); 

// The curl function optionally accepts the '$name' parameter 
// which can be overwritten in its original scope. 
function curl($email, &name=null) { 
    ... 
    $name = 'xxx'; 
    ... 
} 

if(curl('[email protected]', $name)) 
... 

這是由於這樣的事實:在函數/方法/類變量,等等。只有他們與限定的範圍內可見。 (這是一件好事。)

你可以閱讀更多關於這個在:http://php.net/manual/en/language.variables.scope.php

順便說一句,我會忍不住未命名的函數「捲曲」,因爲這是在衝突方面有風險與現有的功能 - 像「fetchUserData」可能是一個更好的方法。

3

後,如果你的意思是呼應$name變量這樣的:

function abc() { 
    if(isset($arr['data']['0']['id'])) { 
     $name = $arr['data']['0']['name']; 
     return $arr['data']['0']['id']; 
    } 
    ... 
} 
echo $name; 

這是不可能的,除非你宣佈$名稱作爲全球。變量$ name具有局部範圍,除非它是全局變量,否則不能被引用到該函數之外。還有其他的技巧(像引用變量作爲函數參數)也實現了你的目標。

編輯爲基準例如:

$refVar = 'foo'; 
function withRef(&$var) { 
    echo $var; // returns 'foo' 
    $var = 'bar'; 
    return 'return some other value'; 
} 
$result = withRef($refVar); 
echo $refVar; // now returns 'bar' 
+0

打敗我吧,好吧。 +1 - 爲什麼不顯示一個參考變量的例子,如果你心情呢? – 2010-08-04 09:50:33

+0

我編輯了更好格式的答案 – alopix 2010-08-04 10:00:56

2

當然不是。局部變量保持本地化,不會泄漏到外部。你有絲毫的想法,如果它有效可能會導致多少havok?你永遠不能依靠某些函數的局部變量不會影響你自己的。

返回一些數據結構(例如陣列(「姓名」 => ...,「ID」 => ...)),從該主叫方可以得到他所需要的信息。或者使用參考參數並設置該參數。