2014-10-29 22 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); 
    } 
} 
} 

這種方式給了我一個錯誤說:

注意:未定義的變量:iUserId在C:\ XAMPP \ htdocs中\ APPS \ MyVyn \ utils的\ utils的\ PHP \ userQuery.php on line

我真的很茫然。什麼在吹?

+2

有什麼不清楚的錯誤消息?另外,你不能縮小代碼的範圍嗎? – 2014-10-29 00:43:31

+1

你確定_SESSION已設置? – Sergey 2014-10-29 00:48:40

+0

@JohnConde對於兩組不同的代碼有兩種不同的結果。錯誤非常明顯,但這並不能說明我在哪裏搞亂了。我嘗試設置變量並訪問它我如何知道,所以如果你知道另一種方式,那麼請賜教。這就是爲什麼我轉向了stackoverflow和其他人的幫助。 – user2812097 2014-10-29 01:17:17

回答

2

你必須iUserID

面前的一個額外的$
$sQuery = "SELECT * FROM `note` WHERE `sender_Id` = '" . $this->$iUserId . "'"; 

應該

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

我在上面的第一組代碼中試過。它不返回任何內容,因爲查詢字符串中的變量由於某種原因而爲空。 – user2812097 2014-10-29 01:13:41

+0

您確定$ _SESSION ['user_Id']中有數據嗎?確保會話變量拼寫正確,大小寫很重要。如果任何代碼沒有運行,那麼它將是空的。如果這是一個問題,你的構造函數應該檢查它。 – redreinard 2014-10-29 20:51:37