2012-04-18 31 views
0

我想或者我會更喜歡在一個帶有Php的函數中指出參數的實際類型,這可能嗎?php指示真實類型

例子:

<?php 
function test($param) 
{ 
    echo $param; 
} 
$str = "hiiiii everyone"; 
test($str); 
?> 

而不是把剛美元的功能測試PARAM;我想把這樣的東西

function test(string $param) // string is the type of the param, that can be int, long ect or an object which I had created. 

這是可以做到這一點與最新版本的PHP?

+0

@Jonathan桑普森:謝謝:-) – Dale 2012-04-18 16:16:35

+1

[文件](http://php.net/manual /en/function.is-numeric.php)[is](http://php.net/manual/en/function.is-int.php)[your](http://php.net/manual/en /function.is-string.php)[friend](http://php.net/manual/en/function.is-object.php)。閱讀。愛它。用它。 – 2012-04-18 16:17:06

+0

爲什麼要謝謝你? – Necko 2012-04-18 16:23:15

回答

1

你在找什麼是Type Hinting。但是,如鏈接手冊頁所述:

類型提示不能與標量類型(如int或string)一起使用。

這意味着不,你不能強制函數的參數是字符串。你可以強制它成爲特定類的實例,可調用的東西或數組。

如果要強制參數是一個字符串,做這樣的事情:

function my_func ($mustBeAString) { 
    if (!is_string($mustBeAString)) return; 
    // Do stuff here 
} 
0

我願把這個表:

var_dump($str); 
1

Type Hinting在PHP5中引入的。正如您的示例所示,您現在可以通過在參數列表中提供該類型來強制參數具有某種類型。

不幸的是,不允許使用標量對象(如intstring)。

你可以做你自己的內部檢查,以確定傳遞的對象是否是使用像gettype()方法適當類型的,is_string()(處理other types也一樣),甚至型算instanceof

+0

我想知道爲什麼你刪除了這個。 +1 – 2012-04-18 16:25:36

1

否PHP是一種動態類型語言;變量(以及參數)沒有設置類型。你可以嘗試使用gettype,即執行自己的事情:

function test($param) { 
    if(gettype($param) != "string") 
     throw new TypeException //or something 
} 

但它是一個壞主意。不要嘗試用新手語言來實現其他語言的功能。只要嘗試擁抱正確的方式,看看它是如何從那裏。

+0

最好的解釋和清楚。 +1 – 2012-04-18 16:19:54

+0

哎呀忘了縮進。謝謝@xbonez – 2012-04-18 16:20:27

+0

thx很明顯,代碼的美感非常無趣,不知道它們的類型是否具有某些功能...... – Necko 2012-04-18 16:22:47