Php 断言一组参数是字符串,没有is_string()?
这对于两个论点来说是好的。。。但对于例如7个论点来说,这就变得可笑了。有没有更好的处理方法?没有。如果它们是对象或数组,则是(通过参数签名),但不是字符串。不是真的。如果它们是对象或数组,则是(通过参数签名),但不是字符串 有更好的处理方法吗 不要检查。打电话的人要当心 有更好的处理方法吗Php 断言一组参数是字符串,没有is_string()?,php,Php,这对于两个论点来说是好的。。。但对于例如7个论点来说,这就变得可笑了。有没有更好的处理方法?没有。如果它们是对象或数组,则是(通过参数签名),但不是字符串。不是真的。如果它们是对象或数组,则是(通过参数签名),但不是字符串 有更好的处理方法吗 不要检查。打电话的人要当心 有更好的处理方法吗 不要检查。打电话的人要当心。如果你的情况可能的话,我会这样做: public static function GetDirectLoginUser($username, $password) { if
不要检查。打电话的人要当心。如果你的情况可能的话,我会这样做:
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()最多应该足够了,即使对于库也是如此。无效的参数类型总是在开发时捕获。