<?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'];
正上方但我运行$name
$a = curl($mail);
变量
答案 0 :(得分:3)
如果你的意思是:
function abc() {
if(isset($arr['data']['0']['id'])) {
$name = $arr['data']['0']['name'];
return $arr['data']['0']['id'];
}
...
}
echo $name;
除非您将$ 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'
答案 1 :(得分:2)
当然不是。局部变量保持在本地,它不会泄漏到外部。你有什么想法,如果有效的话可能导致多少havok?你永远不能依赖某个函数的局部变量不会影响你自己的。
返回一些数据结构(例如数组('name'=&gt; ...,'id'=&gt; ...)),调用者可以从中获取所需的信息。或者使用参考参数并设置该参数。
答案 2 :(得分:1)
除非您正在更新全局变量(使用它不是最佳实践),否则“访问”函数/方法中存在的变量的唯一方法是函数/方法返回您需要的值或通过引用接受变量作为参数并更新变量。
即:
// curl returns the required value.
$name = curl('email@xxx');
或
// 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@xxx', $name))
...
这是因为函数/方法/类等中的变量只能在它们定义的范围内可见。 (这是件好事。)
您可以在http://php.net/manual/en/language.variables.scope.php
了解更多相关信息顺便说一句,我很想不要将函数命名为“curl”,因为这与现有函数冲突是有风险的 - 像“fetchUserData”这样的东西可能是更好的方法。