我有一个通过curl请求加载URL的函数,但是我已经读过使用global不是正确/正确的方法来实现我想要实现的目标。
以下代码适用于我想要实现的目标,但仅限于使用global关键字。这是实现这一目标的最佳方式吗?感谢。
<?php
function loadURL($feedURL, $feedName) {
global $$feedName;
$curl = curl_init();
curl_setopt_array($curl, Array(
CURLOPT_URL => $feedURL,
CURLOPT_TIMEOUT => 120,
CURLOPT_CONNECTTIMEOUT => 30,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => 'UTF-8',
CURLOPT_INTERFACE => 'IP.ADD.RE.SS'
));
$data = curl_exec($curl);
curl_close($curl);
$$feedName = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
}
loadURL ("http://www.tesco.com/sitemap.xml", "TescoFeed");
var_dump($TescoFeed);
?>
答案 0 :(得分:1)
现在经常不鼓励使用全局变量,并且使用变量变量也是类似的。它们是一个方便的工具,但在这种情况下,你最好使用该属性而不是变量变量返回一个对象,例如:
function loadURL($feedURL, $feedName)
{
// do stuff
$result = new stdClass();
$result->{$feedName} = 'your results';
return $result;
}
$result = loadURL('foo.bar', 'TescoFeed');
var_dump($result->TescoFeed); // your results
我假设您为此方法的结果使用了不同的变量,因此您可以在一个过程中运行多个Feed,但也许您甚至不需要区分回报?
function loadURL($feedURL)
{
// do stuff without the name, because you may not need it!?
return 'your results';
}
$TescoFeed = loadURL('foo.bar');
答案 1 :(得分:0)
只需返回数据,并将其分配给调用者中的变量。
function loadURL($feedURL) {
global $$feedName;
$curl = curl_init();
curl_setopt_array($curl, Array(
CURLOPT_URL => $feedURL,
CURLOPT_TIMEOUT => 120,
CURLOPT_CONNECTTIMEOUT => 30,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => 'UTF-8',
CURLOPT_INTERFACE => 'IP.ADD.RE.SS'
));
$data = curl_exec($curl);
curl_close($curl);
return simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
}
$TescoFeed = loadURL ("http://www.tesco.com/sitemap.xml");
var_dump($TescoFeed);
这更通用,因为您可以将结果放在变量,数组或对象中,或在其上调用var_dump()
等。