我是靠谱客的博主 温婉香菇,最近开发中收集的这篇文章主要介绍php判断是为字符串类型,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 ===”比空($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

标签:php,performance,micro-optimization

来源: https://codeday.me/bug/20190724/1526527.html

最后

以上就是温婉香菇为你收集整理的php判断是为字符串类型,PHP:检查变量是否为字符串类型并且不是空字符串?的全部内容,希望文章能够帮你解决php判断是为字符串类型,PHP:检查变量是否为字符串类型并且不是空字符串?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部