2010-01-17 24 views
3

我收到此錯誤的PHP類方法的返回>值...PHP錯誤不能用在寫方面

Fatal error: Can't use method return value in write context in C:\webserver\htdocs\friendproject2\includes\classes\User.class.php on line 35

這裏是困擾部分。

if(isset($this->session->get('user_id')) && $this->session->get('user_id') != ''){ 
    //run code 
} 

此代碼是我contrustor,是一種價值尚未設置爲$這 - >會話級>獲取(「USER_ID」),那麼它會返回,而不是一個號碼錯誤的。所以你可以看到我希望檢查這個值是否是一個數字或者甚至沒有設置。

與固定任何幫助表示讚賞。

+0

我已經習慣了自己的方法的被期望返回值,如果沒有值,並且只返回應返回的操作是否失敗的指示方法布爾值(真/假)返回null /得手。你也可以使用這個範例進行合併。有益的是,特別是當一個方法被期望返回一個數字時,你不會把數值零誤認爲錯誤。 – 2010-01-17 00:40:11

回答

14

不能使用isset一個函數的結果。請看下面的代碼來代替:

if($this->session->get('user_id')){ 
    //run code 
} 
+3

哈!學到了一些東西。 +1 – 2010-01-17 00:26:35

+4

請記住,如果您的應用程序允許值爲0的user_id,那麼將失敗,因爲0的結果爲false。在許多應用程序中,user_id可能不太可能,但仍然想指出。 – 2010-01-17 00:30:49

+2

嗯,現在我更詳細地閱讀了OP的問題,我看到他提到如果沒有user_id,該方法返回false。不過,也許:if(false!== $ this-> session-> get('user_id'))...可能會更節省一點。 – 2010-01-17 00:33:18

12

isset() only works with variables as passing anything else will result in a parse error. For checking if constants are set use the defined() function.

PHP Manual

1

不能對一個函數使用isset。然而,由於false0,並且''都等同於falsey聲明,編寫測試是這樣的:

if($id = $this->sessions->get('user_id')){ 
    // Will only run if $id does not equal '', False, or 0 
} 

你已經運行測試賦值的變量一步到位的方式。

+2

提醒一句,關於轉讓如果() - 它很容易得到一個有點困惑,如果你添加第二個條件,你如果。 &&運算符的優先級高於分配,所以'如果($ ID = myFunc的()&& $ ID> 0)'是邏輯上等同於'如果($ ID =(myFunc的()&& $ ID> 0))',而什麼你可能的意思是'if(($ id = myFunc())&& $ id> 0)'。只是想把它扔到那裏,因爲這是我偶爾發現的一個小錯誤,如果你不知道尋找它,可能很難捕捉到。 – 2010-01-17 02:57:13