2016-07-11 3 views
0

У меня возникла странная проблема с моим PHP-кодом. Это версия php, использующая PHP 5.3.2-1ubuntu4.30 with Suhosin-Patch.Переменная класса PHP не назначена

Проблема, которую я имею что я не могу назначить что-нибудь к переменной, которая является частью моего класса

namespace Stats\POTSPortStats; 


use PDO; 
use Stats\Port; 
use Stats\POTSPortStats\IPHosts\IPHosts; 

class PortStats extends Port 
{ 

    public $vcPortOnHookStatus; 
    public $vcPortImpedance; 
    public $ipHosts; 

    /** 
    * @param $secretValue int 
    * @param $pdo_conn PDO 
    * @return PortStats[] 
    */ 
    public static function getAll($secretValue, $pdo_conn){ 
     try { 
      $query = 
       "SELECT * FROM secretTable WHERE secretColumn = :secretValue"; 
      $pdo_stmt = $pdo_conn->prepare($query); 
      $pdo_stmt->bindValue(":secretValue", $secretValue, PDO::PARAM_INT); 
      $pdo_stmt->execute(); 

      /** @var PortStats $result */ //This works right 
      $result = $pdo_stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__); 

      //other is assigned an Array of IPHosts classes 
      $other = IPHosts::getAll($secretValue, $pdo_conn); 
      echo json_encode($other); 
      //Checked for result, it is there. 
      $result->ipHosts = $other; 

      //Check just assigned value 
      var_dump($result->ipHosts); 
      //Value was NULL 
     } catch (\PDOException $e) { 
      //nothing here 
      var_dump($e); 
     } 
     //The rest of the result is returned correctly 
     return $result; 
    } 

Есть ли что-то случилось с моим кодом, что я с видом? Есть ли какая-то ошибка внутри этой версии PHP, которую я не нашел, когда смотрел? Любая помощь приветствуется. Пожалуйста, спросите, нужно ли вам больше разъяснений.

+0

Любые ошибки, показывающие? Что еще более важно, это сообщение об ошибках? – Script47

+0

Я не вижу никаких ошибок. –

+0

Убедитесь, что PHP установлен для отображения всех ошибок: 'ini_set ('display_errors', '1');' и 'error_reporting (E_ALL);'. –

ответ

4

Я думаю, что проблема в этой строке:

$result = $pdo_stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__); 

Вы уверены, что pdo_stmt-> fetchAll (...) возвращает объект PortStats типа? Я не думаю, что это так. Он возвращает массив. И тем более, я не думаю, что вы можете неявно использовать класс PortStats.

Try:

$results=$pdo_stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__); 
foreach($results as $result){ 
    var_dump($result); 
} 
+0

Это то, что я думал, что у меня еще не было возможности проверить его, хотя –

+0

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

+0

Должно быть/** @var PortStats [] $ result * /, а затем изменить некоторый код в классе 'IPHosts' –

0

Я думаю, что может быть проблемой на следующей строке.

$other = IPHosts::getAll($nCircuitStatsID, $pdo_conn); 

Я не могу видеть $nCircuitStatsID определяется где-нибудь еще в вашем коде. Это глобальный?

Я также ожидал бы, что fetchAll() вернет массив типа __CLASS__, а не экземпляр __CLASS__.

+0

То же самое, что и $ secretValue, забыл изменить его. –

+0

В этом случае я ожидаю, что проблема будет такой же, как и @DreamBlob. –

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