PHP:检查变量是否为字符串类型并且不是空字符串?

邪恶的玲子

我需要检查传递的变量是否为字符串类型,并且它不是空的。我有以下功能:

function isNonEmptyStr($var)
{
    if(isset($var)) {
        if(is_string($var)) {
            if(strlen($var) > 0) {
                return true;
            }
        }
    }
    return false;
}

我期望的结果:

echo(isNonEmptyStr(''));// false
echo(isNonEmptyStr(' '));// true
echo(isNonEmptyStr('a'));// true
echo(isNonEmptyStr('1'));// true
echo(isNonEmptyStr(1));// false
echo(isNonEmptyStr(0));// false
echo(isNonEmptyStr(0.0));// false
echo(isNonEmptyStr(0.1));// false
echo(isNonEmptyStr(array()));// false
echo(isNonEmptyStr(new myObj()));// false
echo(isNonEmptyStr(true));// false
echo(isNonEmptyStr(false));// false
echo(isNonEmptyStr(null));// false

该功能工作正常。

我的问题:有没有办法在不影响结果的情况下提高功能性能?

我说的是“微优化”(我经常使用此功能)。

编辑

对于那些在问:

echo(isNonEmptyStr(0));// should return false, because it's not a string
echo(isNonEmptyStr(1));// should return false, because it's not a string
echo(isNonEmptyStr('0'));// should return true, because it's a non-empty string
echo(isNonEmptyStr('1'));// should return true, because it's a non-empty string

注意:非空字符串=字符串,如果使用strlen()函数进行测试,它将返回> 0

盛开

这是一个简单的基准测试脚本,您可以对其进行修改以查看最有效的方法。我只是尝试了同一件事的几种变体,第一个是一点点最快的,但基本上都是一样的。而且,实际上没有一种更简单的方法可以让您编写它。

此外,$val === ''它的速度比略快empty($val)而且对您的要求更严格。

另外,由于这基本上是一个线性函数,所以为什么不减少使其成为函数并is_string($val) && $val !== ''直接调用的开销它并没有太大的区别,但是它在数百万次迭代中引人注目,但是我怀疑此过程是否会成为您任何代码中的主要瓶颈...

function is_non_empty_string_1($val)
{
    return is_string($val) && $val !== '';
}

function is_non_empty_string_2($val)
{
    return gettype($val) === 'string' && $val !== '';
}

function is_non_empty_string_3($val)
{
    switch (true) {
        case !is_string($val): return false;
        case $val === '': return false;
    }

    return true;
}

$values = array('', '1', new stdClass(), 1, 2, 3, 999, array(), array());
$runs = 2000000;


function benchmark($test, $values, $runs, $func)
{
    $time = time();
    for ($i = 0; $i < $runs; $i++) {
        foreach ($values as $v) {
            $func($v);
        }
    }
    echo $test . '. ' . (time() - $time) . PHP_EOL;
}

benchmark(1, $values, $runs, 'is_non_empty_string_1');
benchmark(2, $values, $runs, 'is_non_empty_string_2');
benchmark(3, $values, $runs, 'is_non_empty_string_3');

结果:

1. 5
2. 6
3. 6

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP:检查变量是否为字符串类型并且不是空字符串?

来自分类Dev

检查字符串是否为字母,并且不包含某些特定单词

来自分类Dev

检查是否为StringBuilder()AppendLine()为空字符串

来自分类Dev

检查空字符串是否为null?

来自分类Dev

如何检查列表是否为空字符串

来自分类Dev

检查结果是否为空字符串

来自分类Dev

检查结果是否为空字符串

来自分类Dev

ImmNotifyIME()是否为空字符串?

来自分类Dev

PHP开关为空字符串

来自分类Dev

检查Pandas Series是否为字符串类型

来自分类Dev

如何检查变量是否为字符串

来自分类Dev

如何检查变量是否为字符串?

来自分类Dev

检查字符串变量列表是否为特定字符串

来自分类Dev

检查字符串变量列表是否为特定字符串

来自分类Dev

检查外壳中的非空字符串(而不是!-z)

来自分类Dev

如何检查给定变量值是否为字符串类型

来自分类Dev

PDO,检查是否为空字符串,如果为空则不更新

来自分类Dev

PDO,检查是否为空字符串,如果为空则不更新

来自分类Dev

ant条件执行(ant中的if-else语句)并检查属性是否不是空字符串

来自分类Dev

仅在预检查为空字符串时串联C#字符串

来自分类Dev

仅在预检查为空字符串时串联C#字符串

来自分类Dev

空字符串和“”是否是相同的字符串?

来自分类Dev

检查字符串数组是否包含没有循环的非空字符串

来自分类Dev

检查字符串数组是否包含没有循环的非空字符串

来自分类Dev

Python检查多个字符串中是否有空字符串

来自分类Dev

如何检查单词中的空字符串是否在python中评估为true?

来自分类Dev

在Where子句中添加检查Parameter是否为空字符串

来自分类Dev

如何检查Django表单数据是否为None,''(空字符串)或False

来自分类Dev

在Swift中检查nil参数以及该参数是否为空字符串

Related 相关文章

  1. 1

    PHP:检查变量是否为字符串类型并且不是空字符串?

  2. 2

    检查字符串是否为字母,并且不包含某些特定单词

  3. 3

    检查是否为StringBuilder()AppendLine()为空字符串

  4. 4

    检查空字符串是否为null?

  5. 5

    如何检查列表是否为空字符串

  6. 6

    检查结果是否为空字符串

  7. 7

    检查结果是否为空字符串

  8. 8

    ImmNotifyIME()是否为空字符串?

  9. 9

    PHP开关为空字符串

  10. 10

    检查Pandas Series是否为字符串类型

  11. 11

    如何检查变量是否为字符串

  12. 12

    如何检查变量是否为字符串?

  13. 13

    检查字符串变量列表是否为特定字符串

  14. 14

    检查字符串变量列表是否为特定字符串

  15. 15

    检查外壳中的非空字符串(而不是!-z)

  16. 16

    如何检查给定变量值是否为字符串类型

  17. 17

    PDO,检查是否为空字符串,如果为空则不更新

  18. 18

    PDO,检查是否为空字符串,如果为空则不更新

  19. 19

    ant条件执行(ant中的if-else语句)并检查属性是否不是空字符串

  20. 20

    仅在预检查为空字符串时串联C#字符串

  21. 21

    仅在预检查为空字符串时串联C#字符串

  22. 22

    空字符串和“”是否是相同的字符串?

  23. 23

    检查字符串数组是否包含没有循环的非空字符串

  24. 24

    检查字符串数组是否包含没有循环的非空字符串

  25. 25

    Python检查多个字符串中是否有空字符串

  26. 26

    如何检查单词中的空字符串是否在python中评估为true?

  27. 27

    在Where子句中添加检查Parameter是否为空字符串

  28. 28

    如何检查Django表单数据是否为None,''(空字符串)或False

  29. 29

    在Swift中检查nil参数以及该参数是否为空字符串

热门标签

归档