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:检查变量是否为字符串类型并且不是空字符串?相关推荐
- C语言边角料:结构体中指针类型的成员变量,它的类型重要吗?
一.前言 昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个 Warning! 本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型的指针成员变量导致的问题. 这个 ...
- oracle和mysql空字符串_Oracle数据库中对null值的排序及mull与空字符串的区别
order by排序之null值处理方法在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为 ...
- python字符串可以保存在变量中吗_在python中可以从字符串变量实例化类吗?
一位评论者提到 exec ;这是您将其组合在一起的方式: def string_to_class(python_text): local_vars = {} exec(python_text, {}, ...
- mybatis 解析Integer为0的属性,解析成空字符串
使用Mybatis时,常常会判断属性是否为空 1 <if test="type != null and type != ''"> 2 and type = #{type ...
- python空字符串意义_Python中的None与空字符串”的区别
1.首先要了解Pythond的对象的概念: Python中,万物皆对象,所有的操作都是针对对象的,那什么是对象,5是一个int对象,'oblong'是一个str对象,异常也是一个对象,抽象一点是,人, ...
- 空字符串和null有什么区别
空字符串和 null 有很大的区别. 空字符串是一个长度为 0 的字符串,它是一个有效的字符串,代表着没有任何内容. 而 null 则表示没有任何值,不是一个有效的字符串,也不代表任何意义.它指向了一 ...
- 空字符,空格字符,空字符串,unicode表示字符
unicode码编码规则 unicode码对每一个字符用4位 16进制数表示,即两个字节 ascall码 一个字符,占一个字节 所以用unicode码表示 ascall里面的字符 前面 ...
- 如何检查变量的类型是否为字符串?
有没有办法检查python中的变量类型是否为字符串. 喜欢: isinstance(x,int); 对于整数值? #1楼 根据以下更好的答案进行编辑. 下来大约3个答案,找出basetring的凉爽. ...
- hive 判断子字符串_Java中检查空字符串(null或空白)的方法有几种?
说明: 本文为牛旦教育原创,头条首发,转发须注明来源和原文网址. 1.摘要 在本文中,我们将介绍些方法检查Java中的空字符串(空的或空白符串).我们有些语言的原生方法以及几个库可用. 2.空与空白( ...
最新文章
- 简历这样写,技术人都不直男了!
- Linux 技巧:谈 Linux GNU 实用工具兼容性
- 【双系统下给ubuntu18.04扩容】
- 服务器远程显示用户忙,服务器远程显示用户忙
- 中间人攻击-http流量嗅探
- Chap-3 Section 3.3 ELF文件头
- 第二次团队冲刺第二天
- 用 Access+Outlook 来采集信息
- nginx IP 80跳转443
- 新版贵金属喊单直播间 财经直播间系统 视频直播室在线喊单 源码
- Linux内核的裁剪移植,Linux内核裁剪移植学习分享
- 计算机无法连接steam,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
- 华芯飞CC1600到底由谁设计?
- 如何关闭WPS烦人的广告推送
- Strange Fractions(奇怪的分数)-数论
- 软件著作权 -- 注册+实名认证
- java周记工作内容
- ION-DTN-前向纠错编码ECLSA详细介绍
- sony z1 android 6.0,大力出奇迹 — 索尼 Z1 更换电池记录
- 微信小程序分账流程及功能
热门文章
- IDC:爱数再次蝉联备份一体机市场中国品牌第一
- HCIP第十天 交换第一天
- 梦想世界3手游服务器维护,《梦想世界3》手游全新内容“沧海秘宝”正式上线 同名新服同期开启...
- Python超简单零基础树莓派摄像头车牌识别(使用开源openalpr)笔记
- 齐鲁医药学院计算机考试,齐鲁医药学院2020年单独招生和综合评价招生考试时间及考试科目...
- FL Studio 2023最新发布的21版本新功能介绍/主题包/下载安装激活教程
- 弹性盒模型的实际应用
- C#类似仪表盘数据显示的制作
- winxp映射linux目录,如何让WinXP与Linux二者相互共存(2)
- 惠普电脑F11C语言,【惠普F11】一键恢复,拯救你的操作系统!