断言一组参数是没有is_string()的字符串?

时间:2011-10-10 03:48:11

标签: php

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个论点变得荒谬可笑。有没有更好的处理方式?

4 个答案:

答案 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会将其视为字符串。