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

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:检查变量是否为字符串类型并且不是空字符串?相关推荐

  1. C语言边角料:结构体中指针类型的成员变量,它的类型重要吗?

    一.前言 昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个 Warning! 本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型的指针成员变量导致的问题. 这个 ...

  2. oracle和mysql空字符串_Oracle数据库中对null值的排序及mull与空字符串的区别

    order by排序之null值处理方法在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为 ...

  3. python字符串可以保存在变量中吗_在python中可以从字符串变量实例化类吗?

    一位评论者提到 exec ;这是您将其组合在一起的方式: def string_to_class(python_text): local_vars = {} exec(python_text, {}, ...

  4. mybatis 解析Integer为0的属性,解析成空字符串

    使用Mybatis时,常常会判断属性是否为空 1 <if test="type != null and type != ''"> 2 and type = #{type ...

  5. python空字符串意义_Python中的None与空字符串”的区别

    1.首先要了解Pythond的对象的概念: Python中,万物皆对象,所有的操作都是针对对象的,那什么是对象,5是一个int对象,'oblong'是一个str对象,异常也是一个对象,抽象一点是,人, ...

  6. 空字符串和null有什么区别

    空字符串和 null 有很大的区别. 空字符串是一个长度为 0 的字符串,它是一个有效的字符串,代表着没有任何内容. 而 null 则表示没有任何值,不是一个有效的字符串,也不代表任何意义.它指向了一 ...

  7. 空字符,空格字符,空字符串,unicode表示字符

    unicode码编码规则     unicode码对每一个字符用4位 16进制数表示,即两个字节 ascall码     一个字符,占一个字节 所以用unicode码表示 ascall里面的字符 前面 ...

  8. 如何检查变量的类型是否为字符串?

    有没有办法检查python中的变量类型是否为字符串. 喜欢: isinstance(x,int); 对于整数值? #1楼 根据以下更好的答案进行编辑. 下来大约3个答案,找出basetring的凉爽. ...

  9. hive 判断子字符串_Java中检查空字符串(null或空白)的方法有几种?

    说明: 本文为牛旦教育原创,头条首发,转发须注明来源和原文网址. 1.摘要 在本文中,我们将介绍些方法检查Java中的空字符串(空的或空白符串).我们有些语言的原生方法以及几个库可用. 2.空与空白( ...

最新文章

  1. 简历这样写,技术人都不直男了!
  2. Linux 技巧:谈 Linux GNU 实用工具兼容性
  3. 【双系统下给ubuntu18.04扩容】
  4. 服务器远程显示用户忙,服务器远程显示用户忙
  5. 中间人攻击-http流量嗅探
  6. Chap-3 Section 3.3 ELF文件头
  7. 第二次团队冲刺第二天
  8. 用 Access+Outlook 来采集信息
  9. nginx IP 80跳转443
  10. 新版贵金属喊单直播间 财经直播间系统 视频直播室在线喊单 源码
  11. Linux内核的裁剪移植,Linux内核裁剪移植学习分享
  12. 计算机无法连接steam,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
  13. 华芯飞CC1600到底由谁设计?
  14. 如何关闭WPS烦人的广告推送
  15. Strange Fractions(奇怪的分数)-数论
  16. 软件著作权 -- 注册+实名认证
  17. java周记工作内容
  18. ION-DTN-前向纠错编码ECLSA详细介绍
  19. sony z1 android 6.0,大力出奇迹 — 索尼 Z1 更换电池记录
  20. 微信小程序分账流程及功能

热门文章

  1. IDC:爱数再次蝉联备份一体机市场中国品牌第一
  2. HCIP第十天 交换第一天
  3. 梦想世界3手游服务器维护,《梦想世界3》手游全新内容“沧海秘宝”正式上线 同名新服同期开启...
  4. Python超简单零基础树莓派摄像头车牌识别(使用开源openalpr)笔记
  5. 齐鲁医药学院计算机考试,齐鲁医药学院2020年单独招生和综合评价招生考试时间及考试科目...
  6. FL Studio 2023最新发布的21版本新功能介绍/主题包/下载安装激活教程
  7. 弹性盒模型的实际应用
  8. C#类似仪表盘数据显示的制作
  9. winxp映射linux目录,如何让WinXP与Linux二者相互共存(2)
  10. 惠普电脑F11C语言,【惠普F11】一键恢复,拯救你的操作系统!