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个论点变得荒谬可笑。有没有更好的处理方式?
答案 0 :(得分:3)
有更好的处理方法吗?
不要检查。来电者要小心。
答案 1 :(得分: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..
答案 2 :(得分:0)
不是真的。如果它们是对象或数组是(通过参数签名),而不是字符串。
答案 3 :(得分: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将(通常)自动将它们转换为字符串。大多数时候,你真的不应该担心PHP变量是数字还是字符串 - 如果你将它用作数字,PHP会将其视为数字;如果您将它用作字符串,PHP会将其视为字符串。