2016-10-17 6 views
1

Im недавно перешел от процедурного к oop с моим php, я изучаю книгу, а также выполняя упражнения и проекты в книге, я также даю себе реальный проект сделайте для моего собственного сайта.Инициализировать класс и иметь проблемы с неопределенным смещением

Я хочу реализовать функцию sms на своем веб-сайте, и, исследуя проект, натолкнулся на эту небольшую библиотеку классов, которая подключается к API компании, которую я буду использовать, библиотека находится на github и, кажется, неподдерживается, и мой электронные письма разработчику отскакивают назад.

Это library и это код, я использую, чтобы инициализировать его:

require_once('classes/class.smsquick.php'); 

$username = "someuser"; 
$password = "somepass"; 

$api = new SmsQuick($username, $password); 

//uncommenting the line below returns undefined_index @ line 312 and 282 
//$available_credits = $api->checkBalance(); 

//var_dump($api); //used for checking 

Эти ошибки я получаю:

Примечание: Не определено смещение: 1 в C: \ сайты \ ooptuts \ public \ classes \ class.smsquick.php on line 312

Предупреждение: array_values ​​() ожидает, что параметр 1 будет массивом, логическим значением которого является C: \ websites \ ooptuts \ public \ classes \ class.smsquick. php в строке 282

линия 312 и 282 указываются в следующих два методах, последние два метода необходимы, чтобы я показал те же:

public function checkBalance() { 
    $vars = array(
     'username' => $this->api_username, 
     'password' => $this->api_password, 
     'action' => 'balance', 
    ); 

    $retval = $this->executeApiRequest($vars); 
    list(, $response) = array_values(reset($retval)); // line 282 

    return (int) $response; 
} 

/** 
* Helper method to execute an API request. 
* 
* @param array $vars 
* Data to POST to SMS gateway API endpoint. 
* 
* @return array 
* Response from SMS gateway. 
*/ 
public function executeApiRequest($vars) { 
    // Basic validation on the authentication details 
    foreach ($vars as $key => $value) { 
     switch ($key) { 
      case 'username': 
      case 'password': 
       if (empty($value)) { 
        throw new Exception('API username or password not specified.'); 
       } 
       break; 
     } 
    } 

    $data = $this->preparePostData($vars); 
    $retval = $this->executePostRequest($data); 

    list($status, $response) = explode(':', $retval); // line 312 
    if ($status == 'ERROR') { 
     throw new Exception(strtr('There was an error with this request: !error.', array('!error' => $response))); 
    } 

    $data = array(); 
    $lines = explode("\n", $retval); 
    foreach (array_filter($lines) as $i => $line) { 
     $line = trim($line); 
     $data[$i] = explode(':', $line); 
    } 

    return $data; 
} 

protected function preparePostData($data) { 
    $post_data = array(); 
    foreach ($data as $key => $value) { 
     switch ($key) { 
      case 'to': 
       // Support multiple phone numbers. 
       $value = implode(',', array_unique($value)); 
       break; 
     } 
     $post_data[] = $key . '=' . rawurlencode($value); 
    } 

    return implode('&', $post_data); 
} 

protected function executePostRequest($data) { 
    $ch = curl_init($this->api_endpoint); 
    curl_setopt($ch, CURLOPT_POST, TRUE); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $retval = curl_exec($ch); 
    curl_close($ch); 
    return $retval; 
} 

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

благодаря

ответ

1

Поскольку сброс() возвращает логическое значение. Перемещение вызова сброса() в отдельной строке:

reset($retval); 
list(, $response) = array_values($retval); // line 282 

Я должен сказать, что это возвращает первое значение, однако в вашем случае его возвращения FALSE

Из PHP Manual: reset()

Кроме того, его возможно, что в строке 312 массив, в котором вы проходите, пуст. Попробуйте распечатать значение массива, чтобы быть уверенным. Возможно, ваш звонок CURL не возвращает то, что вы ожидаете.

+1

Вы, конечно, были на правильном пути, мне не пришлось менять линию сброса, проблема была с сертификатом ssl, я переустановил Wamp на прошлой неделе и глупо забыл включить cacert.pem в мою папку Wamp, которая явно возвращалась плохие данные через завиток. Большое спасибо. Отмечено, как ответили. – MartinJJ

+0

Рад, что я мог помочь. Честно говоря, я прочитал проблему в обратном порядке. Я должен был предположить, что вызов CURL будет рассмотрен первым, но так, как я прочитал вопрос, у меня было это назад. Тем не менее, я бы сохранил вызов сброса в своей строке, если значение $ retval в конечном итоге пуст. Вы также можете поместить некоторые ошибки при необходимости – Matt1776