2011-10-24 116 views
5

是否可以將函數參數定義爲多個可能的類型?例如,一個函數可能需要一個字符串或一個整數來完成某件事情。是否有可能以某種方式將其定義爲這樣?在PHP中定義多個函數參數類型

function something(int|string $token) {} 

或者每個參數只支持一種類型?

(請注意,我知道我以後可以過濾輸入,我只是想擁有我的論點鍵入)

回答

2

你能做的最好的被稱爲類型提示,並說明如下:

http://php.net/manual/en/language.oop5.typehinting.php

特別是,您可以提示類類型或數組類型,但(如手冊所述)「不支持使用int和string的傳統類型提示」。所以我想你在這個層面上想要達到的目標是不可能的。

但是,您可以創建自己的包裝等。有可能有一千種方法來處理這個問題。

+1

乾杯其他的東西,我終於知道這就是所謂的類型提示了。 – Swader

+1

它在PHP中僅僅被稱爲Hinting,因爲它實際上只是PHP解釋器的一個提示,因此它被指示「人爲地」檢查參數類型,並在與提示不匹配時拋出錯誤。在靜態類型語言中,它是一個基本的和必需的東西,是函數語法的一部分,它不是那樣調用的......實際上,我認爲它不具有特定的名稱,否則... – Palantir

+0

這非常好知道,謝謝! – Swader

0

PHP是動態類型 - 但類型提示已經被添加到語言 - 所以,如果您還沒有暗示該參數可以傳遞任何你喜歡的類型:

function something($token) 
{ 
    if (is_numeric($token)) { 
    // its a float, double, integer 

    } else { 
    // its a string, array, object 
    } 
} 

(關我不知道如何處理資源)。

但是,如果你想在一個強類型語言編程,然後(恕我直言),你應該使用比PHP

+0

'is_numeric'也包含數字字符串,但不包含資源。 – deceze

+0

謝謝,只是試圖優化它爲HipHop。 – Swader