如何在此页面中不使用全局变量?

时间:2015-07-14 13:03:05

标签: php

在php文件上,我做了这个功能。

function getPrices($url) {
    global $priceList;  // declare global . point of this.

    $src = file_get_contents_curl($url);
    $dom = new DOMDocument();
    $selector = new DOMXPath($dom);
    $results = $selector->query('//table/tr/td/span');

    foreach($results as $node) {
        array_push($priceList, $node->nodeValue);
    }
}

和页面底部,我把它称为几个。

$priceList = array();

getPrices("http://finance.naver.com/item/sise_day.nhn?code=005930");
getPrices("http://finance.naver.com/item/sise_day.nhn?code=005930&page=2");
getPrices("http://finance.naver.com/item/sise_day.nhn?code=005930&page=3");

并显示它。

echo $priceList[1];
echo $priceList[2];
echo $priceList[3];

问题是我使用的是CMS种类的Joomla,Wordpress,他们不支持使用全局变量所以我不知道如何在不使用全局变量的情况下使用它。我该怎么做?我需要很多页面来报废,所以我非常害怕。如果我只废一页,

返回功能, 和

$priceList = getPrices("http://finance.naver.com/item/sise_day.nhn?code=$code");

但我不知道很多报废案例。请帮帮我......

3 个答案:

答案 0 :(得分:2)

一般来说,你不应该使用全局变量。这是不好的做法。这是一种可以重组它的方法:

function getPrices($url) {
    // this is just a local scoped temp var
    $priceList = array();

    $src = file_get_contents_curl($url);
    $dom = new DOMDocument();
    $selector = new DOMXPath($dom);
    $results = $selector->query('//table/tr/td/span');

    foreach($results as $node) {
        array_push($priceList, $node->nodeValue);
    }
    // return the price list
    return $priceList;
}

// here is your real price list
$priceList = array();
// array of urls
$urls = array(
  "http://finance.naver.com/item/sise_day.nhn?code=005930",
  "http://finance.naver.com/item/sise_day.nhn?code=005930&page=2",
  "http://finance.naver.com/item/sise_day.nhn?code=005930&page=3"
  // etc..
);

// loop through the urls and assign the results to the price list
foreach ($urls as $url) {
  $priceList[] = getPrices($url);
}

现在你有$priceList作为数组来做任何事情。或者,如果您希望立即输出..您可以跳过将其放入$priceList并在上面的循环中输出

答案 1 :(得分:0)

您可以将函数的部分结果和merge它们返回到完整的结果数组中。

<?php
$result = [];

$result = array_merge($result, getSomeValues());
$result = array_merge($result, getSomeValues());
$result = array_merge($result, getSomeValues());

var_export($result);

function getSomeValues() {
    static $i = 0;
    // returning a partial result of three elements
    return [ $i++, $i++, $i++ ];
}

打印

array (
  0 => 0,
  1 => 1,
  2 => 2,
  3 => 3,
  4 => 4,
  5 => 5,
  6 => 6,
  7 => 7,
  8 => 8,
)

答案 2 :(得分:0)

您可以将部分结果存储为结果数组的元素 通过这种方式,您可以保留一些“产生”结果的信息 (你甚至可以使用url作为数组索引)

<?php
$result = [];
$result[] = getSomeValues();
$result[] = getSomeValues();
$result[] = getSomeValues();

// now $result is an array of arrays of (some scalar value)
// so your iteration has to be changed
foreach( $results as $presult ) {
  foreach( $presult as $element ) {
    ..do something with $element
  }
}

// or you can "hide" the nesting with 
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($result));
foreach($it as $e ) {
    echo $e, ', ';
} // see http://docs.php.net/spl

function getSomeValues() {
    static $i = 0;
    return [ $i++, $i++, $i++ ];
}

RecursiveIteratorIterator / foreach部分打印0, 1, 2, 3, 4, 5, 6, 7, 8,