2011-10-10 36 views
0
public static function GetDirectLoginUser($username, $password) 
{ 
    if (!is_string($username)) 
    { 
     throw new InvalidArgumentException('Usernames must be strings.'); 
    } 
    if (!is_string($password)) 
    { 
     throw new InvalidArgumentException('Passwords must be strings.'); 
    } 

這對兩個參數很好......但對於例如7個理由變得荒謬。有沒有更好的方式來處理?斷言一組參數是沒有is_string()的字符串?

+0

爲什麼這是一個問題? –

+0

@JaredFarrish:因爲我不想在一個方法的開頭有7個不同的if語句來測試和處理。 –

+0

然後處理該方法的參數。我不知道爲什麼在實踐中這確實有什麼區別。 –

回答

3

有沒有更好的方法來處理?

不檢查。來電者要小心。

0

不是。如果它們是對象或數組(通過參數簽名),但不是字符串。

1

我會做這樣的事情,如果可能的話你的情況:

public static function someMethod($username, $password, $something, $else) 
{ 
    foreach(array('username', 'password', 'something', 'else') as $mustBeString) 
    { 
     // using variable variable here 
     // who would have thought I'd ever propose that :) 
     if(!is_string($$mustBeString)) 
     { 
      throw new InvalidArgumentException(ucfirst($mustBeString) . 's must be strings.'); 
     } 
    } 

    // etc.. 
0

你總是可以做到這一點:

public static function GetDirectLoginUser($username, $password) 
{ 
    foreach (array("username" => $username, "password" => $password) as $name => $arg) 
    { 
     if (!is_string($arg)) 
     { 
      throw new InvalidArgumentException("The $name must be a string."); 
     } 
    } 

但實際上,它通常會更好,只是cast the arguments into the type you need

public static function GetDirectLoginUser($username, $password) 
{ 
    $username = (string) $username; 
    $password = (string) $password; 

或者,更容易,只是使用參數,就好像它們是字符串,PHP將(u sually)將它們自動轉換爲字符串。大多數情況下,如果您將PHP用作數字,您真的不應該擔心PHP變量是數字還是字符串—,PHP會將其視爲數字;如果您將它用作字符串,PHP會將其視爲字符串。

相關問題