2010-09-05 194 views
3

我有一個同事不斷地分配變量並強制他們的類型。例如,他將宣佈類似這樣:php強制類型

$this->id = (int)$this->getId(); 

或返回時,他總是會返回值,例如:

return (int)$id; 

據我所知,PHP是一種鬆散類型的語言,所以我不要求什麼鑄造就在做。我真的很想知道這樣做有什麼好處 - 如果有的話 - 或者他只是在浪費時間和精力去做這件事情?

回答

4

有幾個好處。

  1. 類型檢查。沒有類型檢查,0 == false和1 == true。
  2. 消毒。如果將值插入到SQL查詢中,則不能進行SQL注入,因爲字符串值會轉換爲零。
  3. 完整性。它防止插入無效的數據庫數據。同樣,它會轉換爲零,因此您不會嘗試將字符串插入數據庫中的整數字段。
+2

+1,消毒可能是最有用的理由。 – casablanca 2010-09-05 16:24:14

1

要的值顯式轉換爲 整數,使用(INT)或 (整數)管型。 但是,在大多數 情況下不需要投射,因爲如果運算符,函數或控件 結構需要整數 參數,則 值將自動轉換爲 。值也可以通過intval() 函數轉換爲整數 。

http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting

PHP不需要(或支撐)在可變 聲明 明確的類型定義;變量的類型是 ,由使用 變量的上下文確定。也就是說,如果將 字符串值分配給變量 $ var,則$ var變成一個字符串。如果 整數值然後被分配給 $ var,它將變成一個整數。

PHP自動類型 轉換的一個示例是添加運算符 '+'。如果其中一個操作數是浮點型,則 ,那麼兩個操作數都將被求值爲 浮點數,結果將爲 浮點數。否則,操作數將被解釋爲整數,並且 結果也將是一個整數。注 ,這並不改變操作數本身的 的類型;唯一的 變化是如何操作數 評估和 表達式本身是什麼類型。

http://www.php.net/manual/en/language.types.type-juggling.php

你可以做這樣的事情吧。

function hello($foo, $bar) { 
    assert(is_int($foo)); 
    assert(is_int($bar)); 
} 

http://php.net/manual/en/function.assert.php