Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 断言一组参数是字符串,没有is_string()?_Php - Fatal编程技术网

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

Php 断言一组参数是字符串,没有is_string()?,php,Php,这对于两个论点来说是好的。。。但对于例如7个论点来说,这就变得可笑了。有没有更好的处理方法?没有。如果它们是对象或数组,则是(通过参数签名),但不是字符串。不是真的。如果它们是对象或数组,则是(通过参数签名),但不是字符串 有更好的处理方法吗 不要检查。打电话的人要当心 有更好的处理方法吗 不要检查。打电话的人要当心。如果你的情况可能的话,我会这样做: public static function GetDirectLoginUser($username, $password) { if

这对于两个论点来说是好的。。。但对于例如7个论点来说,这就变得可笑了。有没有更好的处理方法?

没有。如果它们是对象或数组,则是(通过参数签名),但不是字符串。

不是真的。如果它们是对象或数组,则是(通过参数签名),但不是字符串

有更好的处理方法吗

不要检查。打电话的人要当心

有更好的处理方法吗


不要检查。打电话的人要当心。

如果你的情况可能的话,我会这样做:

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.');
    }

如果可能的话,我会这样做:

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.');
    }

您始终可以这样做:

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..
但实际上,通常最好是:


或者,更简单的方法是,将参数当作字符串使用,PHP(通常)会自动将其转换为字符串。大多数时候,你真的不应该担心一个PHP变量是一个数字还是一个字符串——如果你把它当作一个数字,PHP会把它当作一个数字;如果将其作为字符串使用,PHP会将其视为字符串。

您始终可以这样做:

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..
但实际上,通常最好是:


或者,更简单的方法是,将参数当作字符串使用,PHP(通常)会自动将其转换为字符串。大多数时候,你真的不应该担心一个PHP变量是一个数字还是一个字符串——如果你把它当作一个数字,PHP会把它当作一个数字;如果将其用作字符串,PHP会将其视为字符串。

@JaredFarrish:因为我不希望在方法的开头有7个不同的if语句来测试和处理。然后处理方法的参数。我不知道为什么在实践中这真的会有什么不同。如果这真的是您在运行时/生产中所期望的问题,那么应用程序体系结构会有更大的问题。这是目前存在的最无意义的异常类。真正地但是使用断言(array\u sum(array\u map(“is\u string”,func\u get\u args())==2)或缩短的东西。@马里奥:当然,这不是你应该在生产中看到的东西。但这在图书馆里非常普遍。您不希望客户端代码崩溃,因为他指定了<代码> int >代码>而不是字符串。我只是说,我会认为这是一个开发问题。这完全是一个发展问题。而且,为这种边缘情况准备写得很好的错误消息似乎是在浪费内存。一个assert()最多应该足够了,即使对于库也是如此。在开发时总是捕获无效的参数类型。@JaredFarrish:因为我不希望在方法的开头有7个不同的if语句来测试和处理。然后处理方法的参数。我不知道为什么在实践中这真的会有什么不同。如果这真的是您在运行时/生产中所期望的问题,那么应用程序体系结构会有更大的问题。这是目前存在的最无意义的异常类。真正地但是使用断言(array\u sum(array\u map(“is\u string”,func\u get\u args())==2)或缩短的东西。@马里奥:当然,这不是你应该在生产中看到的东西。但这在图书馆里非常普遍。您不希望客户端代码崩溃,因为他指定了<代码> int >代码>而不是字符串。我只是说,我会认为这是一个开发问题。这完全是一个发展问题。而且,为这种边缘情况准备写得很好的错误消息似乎是在浪费内存。一个assert()最多应该足够了,即使对于库也是如此。无效的参数类型总是在开发时捕获。