2012-12-07 52 views
2

有沒有什麼辦法可以在PHP中將原始數據類型傳遞給函數參數(或等價地將它存儲到變量中)?通過原始類型我的意思是intbooldoublestring將原始數據類型傳遞到函數參數

更具體地說,我願做這樣的事情:

function SomeFunc($DataType, $SomeOtherPara) 
{ 
} 

SomeFunc(int, "test1"); 
SomeFunc(bool, "test2"); 

一個可能用法可能是:

//! Cast the input parameter into a data type, recursively. 
/*! 
    \param[in] $DataType   Data type, e.g. int, double, bool, string. 
    \param[in] $InputPara   Any input parameter. 
*/ 
function TypeJuggleRecursive($DataType, $InputPara) 
{ 
    if(is_array($InputPara)) 
    { 
     // Work on each array element recursively. 
     $ReturnPara = array(); 
     foreach($InputPara as $Key => $Value) 
     { 
      $ReturnPara[$Key] = TypeJuggleRecursive($DataType, $Value); 
     } 
     return $ReturnPara; 
    } 
    else 
    { 
     // Cast to data type. 
     return ($DataType)$InputPara; 
    } 
} 

TypeJuggleRecursive(bool, $_GET); 
TypeJuggleRecursive(int, $_POST); 

一個明顯的解決方法是使用字符串,即"string"string,"int"int等,但這似乎愚蠢。

+0

不是我所知道的。但有趣的問題。我只是傳遞字符串或int(某些標識符可以打開)類型,即使它看起來像「笨蛋」一樣,並不像PHP中常用的數以百萬計的數據類型。 –

+0

我不認爲你可以只使用int,字符串等。我會假設這些是保留關鍵字,但不要在此引用我。即使gettype()函數(我會用這樣的東西),返回字符串格式的類型:http://php.net/manual/en/function.gettype.php – kennypu

+0

gettype只會是有用的,如果他想要將傳入的var作爲其自己的類型進行投射。在這種情況下,他想要傳遞類型來投射AS,而不管$ SomeOtherPara是什麼。 –

回答

1

只有9個基本數據類型。您可以使用gettype

function my_cast($value, $new_type) { 
    switch(gettype($value)) { 
     case 'boolean': 
     case 'integer': 
     case 'double': 
     case 'string': 
      // do something 
      break; 
     case 'array': 
     case 'object': 
     case 'resource': 
      // do something else 
      break; 
     case 'NULL': 
     default: 
      // 'unknown type' 
    } 
} 

您將無法在PHP中實際傳遞類型。