2015-04-16 2 views
0

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу использовать динамические переменные внутри класса и функции.Переменная scope php внутри класса и функции

Я бы хотел загрузить $p_name, который получает свое значение от $p_real_name (запись в базе данных), но это не сработает, хотя первые два примера в коде работают просто отлично.

Я пропустил что-то простое? Я пытался объединить несколько различных способов, но на самом деле, я чувствую, что я из моей глубины ..

$p_real_name = $row['input_1']; //This comes further up the code 
    $p_name = 1; // Works fine 
    $p_name = test; // Works fine 
    $p_name = $p_real_name; // Does not work. 
    //If I echo out $p_real_name or even $p_name here, I get the correct value back. 
    class myFunctionClass{ 
     private $_api_user; 
     private $_api_key; 
     private $_token; 
     private $_test; 

     public function __construct($api_user, $api_key, $p_name){ 
      $this->_api_user = $api_user; 
      $this->_api_key = $api_key; 
      $this->_test = $p_name; 
      } 
     public function login(){ 
      $result = $this->_make_api_call('users/login', true, array('api_user' => $this->_api_user, 'api_key' => $this->_api_key)); 
      $this->_token = $result['token']; 
     } 
     public function getToken(){ 
      return $this->_token; 
     } 
     public function myFunction($p_name) { 
      $this->_test = $p_name; //tried with or without global 
       $params = array(
        'token'     => $this->_token, 
        'receiver_name'   => $this->_test, //this only works with the first 2 examples of $p_name at the top of the code, not the 3rd example 
        'receiver_address1'  => $p_address 
       ); 
    $ch = curl_init();  //Latest edit 
    $query = http_build_query($params); 

     curl_setopt($ch, CURLOPT_URL, self::API_ENDPOINT . '/' . 'shipments/imported_shipment'); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 

     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

      $output = curl_exec ($ch); 
      $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
      curl_close ($ch); 

      $output = json_decode($output, true); 
     } 
    } 
    $testObject = new myFunctionClass($api_user, $api_key, $p_name); 
    $testObject->login(); 
    $testObject->getToken(); 
    $testObject->myFunction($p_name);      

Проблема заключается в «RECEIVER_NAME» не получает правильного ввода данных, если я использую $p_name = $p_real_name; только тогда, когда я использую $p_name = 1; or $p_name = static;

+0

Так что не работает здесь, его трудно отличить от вас вопрос. –

+0

Прежде всего, не используйте глобальные. Никогда. Когда-либо. Нет единственной причины использовать его. Когда вы думаете, что нет другого выбора, кроме использования глобального, это означает, что вам просто нужно думать дольше :) –

+0

@Jeff, я попытался добавить несколько строк под обновленным кодом - надеюсь, что это прояснится? – Mark

ответ

0

Ваш конструктор класса определяется как это

public function __construct($api_user, $api_key, $p_name) 

и вы вызываете его как этот

$testObject = new myFunctionClass($api_user, $api_key); 

PHP должен дать вам ошибку, потому что вы передаете только две переменные вместо трех. Сделайте правильную вещь сначала, тогда мы знаем, что именно не работает и почему.

Он должен выглядеть как этот

$testObject = new myFunctionClass($api_user, $api_key, $p_name); 
+0

Спасибо, я попытался добавить $ p_name, как вам было предложено, но не получит его для вывода в массив. – Mark

+0

@Mark вам больше не нужно передавать $ p_name в качестве аргумента myFunction(), что это значение находится в $ this -> _ test – Chibuzo

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