在具有全局范围的函数中创建变量?

时间:2016-05-31 19:33:48

标签: php

我有一个通过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);

?>

2 个答案:

答案 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()等。