2013-01-10 34 views
5

我明白沒有太多,如果在PHP中int和整數之間有任何不同。我一定是錯的。PHP:將整數轉換爲int - 獲取錯誤

我將一個整數值傳遞給一個函數,該函數只有int值。像這樣: -

$new->setPersonId((int)$newPersonId); // Have tried casting with (int) and intval and both 

另一邊我有: -

public function setPersonId(int $value) { 
     // foobar 
    } 

現在,當我跑 - 我得到的消息: -

「PHP開捕致命錯誤:參數1傳遞給setPersonId()必須是int的一個實例,給定整數」

我曾嘗試在呼叫鑄造用(int)和INTVAL()。

任何想法?

+0

PHP不支持類型暗示的標準數據類型(int ,雙打),但支持對象的類型提示。 – gurudeb

+0

當然 - 我也讀過 - 那麼解決方案是什麼? – waxical

+1

從公共函數中刪除'int'setPersonId(int $ value) – gurudeb

回答

14

PHP中的類型提示只適用於對象而不適用於標量,所以PHP期待您傳遞一個「int」類型的對象。

您可以使用以下作爲一種變通方法

public function setPersonId($value) { 
    if (!is_int($value)) { 
     // Handle error 
    } 
} 
+0

當然,我讀過這個 - 但你怎麼處理呢?你不能轉換?我們是否認爲價值需要從一開始就是整數或什麼都不是。 – waxical

+1

如果你希望這個值是一個int,但'is_int'返回false,你可以將它轉換爲'$ value =(int)$ value;'。如果你不在乎它是否是int,只要刪除'is_int'檢查。 – fin1te

+0

這是非常可怕的,但承認似乎是唯一的出路。 PHP沒有得到它:/ – waxical

-2

要明確地將一個值轉換爲integer,用(INT)或(整數)管型。但是,在大多數情況下,不需要強制轉換,因爲如果運算符,函數或控制結構需要整數參數,則會自動轉換值。也可以使用intval()函數將值轉換爲整數。

http://php.net/manual/en/language.types.integer.php

+0

沒有接近答案。 – waxical

-3

確保PersonID屬性被定義爲int不整:

private int $personId; 

,而不是

private integer $personId; 
+0

你不在PHP中,不是嗎? –