2014-07-11 63 views
1

我想限制某人在我的函數調用中可以分配給某個變量的值。 例如說我的功能是限制函數參數以允許特定值

function myFunction ($carType, $isOld , $something) 
{ 
    //do what is required 
} 

我想,我應該能夠限制$ carType,$ isOld只有某些值,從給定的陣列說:

$carTypeValues = array ("car1", "car2", "car3"); 
$isOldValues = array (true,false); 

我知道我可以限制參數變量是某個類的類型。

我試圖找到一種方法來做到這一點,但我無法找到任何地址正是我想要的東西。我知道我可以檢查值一旦我實際執行函數調用,但是我正在尋找的東西,將允許用戶最好能夠使用選擇,如:

myFunction (carType::car1, isOld::car2 , $something); 

我不知道,這可能是:

myFunction (carType.car1, isOld.car2 , $something); 

感謝您閱讀本

+0

有人從架子上選擇了PHP書而不是C :-D – zerkms

+0

是啊..我實際上更多的是Java開發人員,而PHP相對較新,鬆散語言也有一些缺點:) – user2636664

回答

1

您是否正在尋找一種簡單的驗證什麼變量傳遞給你的函數,這樣的事情?

function myFunction ($carType = null, $isOld = null, $something = null) 
{ 
    $carTypeValues = array ("car1", "car2", "car3"); 
    $isOldValues = array (true,false); 

    $strict = true; // strict comparison here? e.g. null == false if $strict is false 

    if(
     !$carType || !$isOld       // variables aren't empty? 
     || !in_array($carType, $carTypeValues, $strict) // passed carType is ok? 
     || !in_array($isOld, $isOldValues, $strict)  // passed isOld is ok? 
    ) { 
     // error, incorrect variable passed 
     return false; 
    } 

    //do what is required 
    return true; 
} 

這將允許你檢查A.你的變量傳遞存在,B.他們的,你定義可接受的一組選項中存在。


我知道我可以檢查值一旦我實際執行函數調用,但是我正在尋找的東西,將允許用戶最好能夠使用選擇

你可以在你的例子中不指定選擇符,但你可能傳遞一個整數來表示一個數組鍵,從而避免需要重複變量的值:

function myFunction($carType = null, $isOld = null, $something = null) { 
    $carTypeValues = array ("car1", "car2", "car3"); 
    $isOldValues = array (true,false); 

    if(
     !$carType || $isOld 
     || !array_key_exists($carType, $carTypeValues) 
     || !array_key_exists($isOld, $isOldValues) 
    ) { 
     return false; 
    } 

    // handle OK 
    return array(
     'car_type' => $carTypeValues[$carType], 
     'is_old' => $isOldValues[$isOld] 
    ); 
} 

myFunction(1, 0, 'foobar'); // array('car_type' => 'car2', 'is_old' => true); 
+0

是的,我知道我可以這樣做,正如我在我的問題中所說的那樣,但是我正在尋找可以提示或提醒用戶的東西。我並不是說這一定是可能的。 – user2636664

+0

如果這是類的一部分,您可以將可能的值設置爲公共屬性,並有一個返回它們的方法,以便向用戶提供可能的選項... –

+0

這是一個獨立函數,而不是類。謝謝 – user2636664

1

有很多方法可以做到這一點。的快速和骯髒的方法是手動檢查值在功能和相應地處理它們:

function myFunction($carType, $isOld, $something) 
{ 
    if (in_array($carType, array('car1', 'car2', 'car3'))) { 
     echo 'Car type is valid'; 
    } 
    if (is_bool($isOld)) { 
     echo 'Car age is valid'; 
    } 
} 

的另一種方法是typehint與驗證輸入的對象的函數定義。 PHP不支持所有類型的類型提示,因此對象可能是要走的路,但這可能會導致這種情況的矯枉過正。

+0

是的,我知道我可以這樣做,就像我在我的問題中所說的那樣,但是我正在尋找一些可以提示或告訴用戶調用函數的東西,它不正確。我開始認爲這可能不值得打擾......在stackoverflow上有一些非常棒的用戶(像你自己一樣),有很多人讓我感到驚訝,因此我想問一下我是不是在想什麼。謝謝 – user2636664

+0

我認爲你正在嘗試做一些PHP根本無法做到的事情。它不支持枚舉類型提示或任何比基本對象和數組提示更復雜的東西。如果你需要這個級別的控制,你會用另一種語言更好。祝你好運! –

+0

我同意你@ orciny,謝謝你的幫助 – user2636664