2014-10-29 3 views
0

Я хочу установить переменные класса не в __construct, а в методе, вызванном __construct. Я не уверен, что я прав.Переменные, которые не работают при попытке доступа к данным

class request{ 
private $sNote; 
private $iAffectedUserId; 
private $iUserId; 
private $sPassword; 
private $sFirstName; 
private $sLastName; 

public function __construct($sService, $oData, $iAffectedUserId){ 
    $this->iUserId = $_SESSION['user_Id']; 
    $this->sPassword = $_SESSION['password']; 
    $this->sFirstName = $_SESSION['firstName']; 
    $this->sLastName = $_SESSION['lastName']; 
    switch($sService){ 
     case 'note': 
      $this->requestNote(); 
      break; 
     default: 
      echo "ErrorCode: 4000"; 
      break; 
    } 
} 

public function requestNote(){ 
    $sQuery = "SELECT * FROM `note` WHERE `sender_Id` = '" . $this->iUserId . "'"; 
    echo $sQuery; 
    $oResult = conn($sQuery); 
    if(!is_array($oResult)||!isset($oResult)||empty($oResult)||is_null($oResult)){ 
     echo "ErrorCode: 5000"; 
    } else{ 
     //echo $this->iUserId; 
     echo json_encode($oResult); 
    } 
} 
} 

В результате из этого кода оставляет мою $sQuery с пустым значением, где $this->iUserId есть. Это означает, что ничего не возвращается.

Другой код был написан.

class request{ 
private $sNote; 
private $iAffectedUserId; 
private $iUserId; 
private $sPassword; 
private $sFirstName; 
private $sLastName; 

public function __construct($sService, $oData, $iAffectedUserId){ 
    $this->init_Session_Variables(); 
    switch($sService){ 
     case 'note': 
      $this->requestNote(); 
      break; 
     default: 
      echo "ErrorCode: 4000"; 
      break; 
    } 
} 

private function init_Session_Variables(){ 
    $this->iUserId = $_SESSION['user_Id']; 
    $this->sPassword = $_SESSION['password']; 
    $this->sFirstName = $_SESSION['firstName']; 
    $this->sLastName = $_SESSION['lastName']; 
} 

public function requestNote(){ 
    $sQuery = "SELECT * FROM `note` WHERE `sender_Id` = '" . $this->$iUserId . "'"; 
    echo $sQuery; 
    $oResult = conn($sQuery); 
    if(!is_array($oResult)||!isset($oResult)||empty($oResult)||is_null($oResult)){ 
     echo "ErrorCode: 5000"; 
    } else{ 
     //echo $this->iUserId; 
     echo json_encode($oResult); 
    } 
} 
} 

Этот способ дает мне ошибку говоря:

Примечание: Undefined переменной: iUserId в C: \ XAMPP \ HTDOCS \ приложения \ MyVyn \ Utils \ Utils \ PHP \ userQuery.php на линии

Я действительно в затруднении здесь. Что взрывается?

+2

Что не ясно, о сообщении об ошибке? Кроме того, вы не могли сузить код дольше этого? –

+1

Вы уверены, что установлена ​​_SESSION? – Sergey

+0

@JohnConde Существуют два разных результата для двух разных наборов кода. Ошибка очень ясна, но это точно не говорит о том, где я запутался. Я попытался установить переменную и получить доступ к ней, как я знаю, поэтому, если вы знаете по-другому, пожалуйста, просветите меня. Вот почему я обратился к stackoverflow и другим людям за помощью. – user2812097

ответ

2

У вас есть дополнительные $ перед iUserID

$sQuery = "SELECT * FROM `note` WHERE `sender_Id` = '" . $this->$iUserId . "'"; 

должен быть

$sQuery = "SELECT * FROM `note` WHERE `sender_Id` = '" . $this->iUserId . "'"; 
+0

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

+0

Вы уверены, что есть данные в $ _SESSION ['user_Id']? Убедитесь, что переменная сеанса написана правильно, важна капитализация. Если какой-либо код не заполняется, он будет пустым. Если это проблема, ваш конструктор должен проверить это. – redreinard

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