2014-01-27 3 views
-1

У меня есть несколько методов в одном классе. Первый метод - запрос данных.Как эффективно построить эти методы?

public function queryData() { 
    if ($this->result) { 
     return $this->result; 
    } 
    $url = 'http://domain.com/cgi-bin/cgi.exe'; 
    $data = array('var1' => 'value1', 'var2' => 'value2'); 
    $options = array(
     'http' => array(
      'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
      'method' => 'POST', 
      'content' => http_build_query($data), 
     ), 
    ); 
    $context = stream_context_create($options); 
    $this->result = explode("\n",file_get_contents($url, false, $context)); 
      array_pop($this->result); 
    return $this->result; 
} 

Тогда мне нужно передать этот результат $ к другим методам:

public function method1() { 
    $this->result = $this->queryData(); 
    $data1 = explode(":",$this->result); 
    return $data1; 
} 

public function method2() { 
    $this->result = $this->queryData(); 
    $data2 = explode(",",$this->result); 
    return $data2; 
} 

Если я этот путь, сценарий будет запрашивать данные во много раз. Как я могу эффективно использовать только один запрос, а затем передать результат $ другим методам?

+0

Сохраните запрос в переменной и передайте эту переменную другим методам. – rendon

ответ

2

Храните результат в переменной класса и выполняйте запрос только в том случае, если он еще не установлен.

class myClass { 

    private $result = null; 

    public function queryData() { 

     if ($this->result) { 
      return $this->result; 
     } 

     $url = 'http://domain.com/cgi-bin/cgi.exe'; 
     $data = array('var1' => 'value1', 'var2' => 'value2'); 
     $options = array(
      'http' => array(
       'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
       'method' => 'POST', 
       'content' => http_build_query($data), 
      ), 
     ); 
     $context = stream_context_create($options); 
     $this0->$result = file_get_contents($url, false, $context); 
     return $this->$result; 
    } 

... 
} 
+0

Спасибо. Однако, похоже, array_pop не работает с результатом $ this->. – user1801605

+0

'$ this-> result' - это строка, а не массив. – Barmar

+0

Вам все равно нужно вызвать 'explode' в' method1' и 'method2', чтобы взорвать его в массив. – Barmar

Смежные вопросы