当前位置:首页 > 日记 > 正文

将字符串转换为整数(int)intvalintvalprintf()()()在PHP的性能测试

将字符串转换为整数(int)intvalintvalprintf()()()在PHP的性能测试
背景概述
早在SQL注入往年的字符串转换为整数,已被列为每个web程序的必要操作。Web程序将ID和整数当量的获得或强制转换功能后为整数,过滤危险字符和减少SQL注入系统本身的可能性。
目前,虽然SQL注入已经逐渐淡出历史舞台,为了保证Web程序的正常运行,降低错误概率,更好地保证用户的满意,还需要将不正确的用户输入转化为我们需要的。
变换方法
在PHP中,我们可以用3种方法将字符串转换成整数。
1。强制类型转换
强制类型转换的方法是在更改变量之前添加括号中包含的对象类型(摘自PHP手动类型节)。
复制代码代码如下所示:
< PHP
$=1;
$ bar = int(int)
>

对于整数,强制转换类型的名称为int或整数。
2。内置功能模式
内置的功能是使用内置函数intval PHP执行变量的变换。
复制代码代码如下所示:
< PHP
$=1;
酒吧= intval美元($ Foo); / / $酒吧是一个整数
>

intval函数的格式:
Int intval(混合为var {,}(int $基地);从PHP手册)
虽然它是明确指出在PHP手册,intval()不能用于数组和对象的转换。但经过我的测试,没有问题时,将数组转换的值是1,不是0的想象。恐怕是因为在PHP中,数组的类型的变量被认为是非零的原因。转换对象时,PHP给出如下通知:
班级XXXX对象不能转换为int xxxxx.php
转换值也为1。
三.格式化字符串模式
格式的字符串的格式是使用sprintf的%d格式指定的变量来实现类型转换的目的。
复制代码代码如下所示:
< PHP
$=1;
$吧= sprintf(%,$ Foo); / / $酒吧是一个字符串类型
>

严格意义上说,对转换结果仍sprintf字符串类型,所以它不应该是一种将字符串转换为整数,但之后他被处理的字符串值确实已经成为一个整数是被迫进入一个字符串类型。
实际测试
上面描述了3种在PHP中转换字符串为整数的方法。对于一般程序员来说,如果你在这里看到它,下面的部分是针对变态程序员的。
1。基本功能测试
设置以下数组:
复制代码代码如下所示:
< PHP
$ $ 1 ;
$;
${1a;
$ { } =1A2;
$ $ 0 ;
$ { } =阵列(一,2);
$ $ 2.3 ;
$ 1;
$ =新目录();
>

使用三种方法来转换上面数组中的元素以查看转换。程序源代码如下所示:
复制代码代码如下所示:
< PHP
$ $ 1 ;
$;
${1a;
$ { } =1A2;
$ $ 0 ;
$ { } =阵列(一,2);
$ $ 2.3 ;
$ 1;
$ =新目录();

打印(int);
foreach($ $ V)
{
var_dump(((int)$ V);
打印;
}
/ / intval
打印intval();;
foreach($ $ V)
{
var_dump(intval($ V));
打印;
}
/ / sprintf
打印sprintf();;
foreach($ $ V)
{
var_dump(sprintf(%d
打印;
}
>

程序最后运行的结果如下(当对象被移除时已被删除的通知):
(int)
Int(1)
Int(0)
Int(1)
Int(1)
Int(0)
Int(1)
Int(2)
Int(- 1)
Int(1)
Intval();
Int(1)
Int(0)
Int(1)
Int(1)
Int(0)
Int(1)
Int(2)
Int(- 1)
Int(1)
Sprintf();
字符串(1)1
字符串(1)0
字符串(1)1
字符串(1)1
字符串(1)0
字符串(1)1
字符串(1)2
字符串(2)1
字符串(1)1
从这一点可以看出,这三个转变的结果是完全相同的,所以从功能的角度来看,3种方式是转换的能力,下一个工作是看哪一个更有效。
2。性能测试
测试的字符串是我们在注入工作中可能使用的内容之一:
复制代码代码如下所示:
< PHP
$ =1;选择*…;
>
获取时间点的功能如下(用于获取测试起点和终点来计算消耗时间):

< PHP
* *
*复制PHP 5行为的简单函数
* /
microtime_float()函数
{
列表(USEC美元美元,SEC)=爆炸(
返回((浮动)$ USEC +(浮动)$秒);
}
>

(从PHP手册()函数瞬时节选部分)
测试过程是以每种方式转换变量1000000倍(100万倍),并输出每次的消耗时间,并进行三组测试以最小化错误:
复制代码代码如下所示:
< PHP
microtime_float()函数
{
列表(USEC美元美元,SEC)=爆炸(
返回((浮动)$ USEC +(浮动)$秒);
}
$ =1;选择*…;

(int)
美元microtime_float FSTART =();
($ i = 0;$ i < 1000000;$ + +)
{
$ =(int)$;
}
美元microtime_float挡=();
打印(int):。($ - $ FSTART谋生)。;
( / / intval)
美元microtime_float FSTART =();
($ i = 0;$ i < 1000000;$ + +)
{
酒吧= intval美元($ Foo);
}
美元microtime_float挡=();
打印intval()。($ - $ FSTART自生自灭)。;
( / / sprintf)
美元microtime_float FSTART =();
($ i = 0;$ i < 1000000;$ + +)
{
$吧= sprintf(%d
}
美元microtime_float挡=();
打印sprintf()。($ - $ FSTART自生自灭)。;
>

最终测试结果:
(int):0.67205619812012s
Intval():1.1603000164032s
Sprintf():2.1068270206451s
(int):0.66051411628723s
Intval():1.1493890285492s
Sprintf():2.1008238792419s
(int):0.66878795623779s
Intval():1.1613430976868s
Sprintf():2.0976209640503s

虽然这个测试是有点变态(谁将会继续把整数100W号)但正如您所看到的,使用强制类型转换将字符串转换成整数速度是最快的。
总结
将一个字符串转换成一个整数使用强制类型转换是一种转换的最直接的方式(你可以直接获得该变量的整数)。从可读性的角度来看,sprintf代码比较长,结果也可能需要重新进行强制类型转换,而intval功能是典型的导向型转换过程中,强制类型转换更是直接将我想传达给读者的转变。在效率方面,强制类型转换是转变的最快途径。因此,我推荐这种方法的程序员经常转换工作。

相关文章

Win8.1系统蓝牙如何打开Win8.1如何

Win8.1系统蓝牙如何打开Win8.1如何

系统,蓝牙,电脑软件,点评:刚刚开始使用Win8.1系统肯定会有很多这样的问题的人,比如果Win8.1有蓝牙吗或在Win8.1蓝牙,等等,本文将在未来回答这些问题。 今天,一个朋友问萧边,他不知道如何打开新的Win8.1蓝牙,当他用蓝牙,他弹出窗口,但蓝牙相关的服务…

Oracle异常介绍(预定义异常、自定义

Oracle异常介绍(预定义异常、自定义

自定义异常,电脑软件,Oracle,在开发过程中,经常会有一些测试。此时,您将需要了解测试过程,然后根据流程分析代码错误。在这种情况下,您需要使用自定义异常。你需要了解你的朋友,你可以参考这篇文章。 声明一个例外 java代码 biz_exception例外; …

Oracle数据库帐户已锁定在解决方案

Oracle数据库帐户已锁定在解决方案

锁定,数据库,帐户,解决方案,电脑软件,在Oracle数据库操作中,Oracle帐户登录时提示符失败,Oracle帐户经常被锁定。失败的原因是什么本文介绍了该工艺,并通过工艺过程找出故障原因。 以下步骤记录在以下记录中。 1。当帐户被锁定并锁定时 哄SQLP…

Linux文件系统损坏原因分析及修复

Linux文件系统损坏原因分析及修复

文件系统,方法,损坏,原因,电脑软件,点评:一个只读文件系统,这个问题的原因可能有两个,一个是多机写同步问题,另一个是服务器掉电情况下单写,解决方法如下,有类似问题的朋友可以参考哈萨克斯坦。 有时Linux服务器的维护会面临这样一个错误,它将文…

什么过程功能infomyca.exe有infomy

什么过程功能infomyca.exe有infomy

查询,过程,功能,电脑软件,infomyca,点评:对于infomyca.exe -详细的注释infomyca过程 进程文件:infomyca或infomyca.exe 进程名称:无线网络监控 过程类别:安全风险的过程 英文描述: infomyca.exe是一个无线网络监控,相关网络的过程中,它也被称为…

字打印设置技巧六

字打印设置技巧六

设置,技巧,电脑软件,Word作为最常用的文本编辑工具,广泛应用于日常工作学习中。 1。反向页序打印 如果你有很多页的文档需要打印,按照Word中的默认设置总是从第一页打印到最后一页,所以打印结束后整个文档的最后一页在第一页的顶部底部,所以…

使用和set_include_path和get_incl

使用和set_include_path和get_incl

电脑软件,set_include_path,get_include_path,set_include_path设置默认包含路径 当找到包含或需要的文件时,在默认的包含路径中查找,然后在同一目录中找到相同的目录。 例: 在D文件: / / / htdocs XAMPP测试/包括cls.mysqli.php 在D文件: / / /…

vmnat.exe过程的意义是什么

vmnat.exe过程的意义是什么

意义,过程,电脑软件,vmnat,exe,评论:vmnat.exe过程的详细解释 进程文件:vmnat或vmnat.exe 进程名称:VMware NAT服务 过程类别:安全风险的过程 英文描述: vmnat.exe是用于运行服务的VMware的NAT应用过程。 中文参考: vmnat.exe是VMware NAT相关…

在Tomcat应用调用libvirt库线程卡

在Tomcat应用调用libvirt库线程卡

线程,调用,电脑软件,Tomcat,libvirt,注释:启动一个线程来实时检测主机的断开状态。当状态不正常时,它会直接以获取连接的方式抛出异常,防止后续的逻辑执行,但这只能解决状态问题,无法解决这种状态下的接口点击问题。我们可以发现Tomcat的线程池…

linux下用户权限的修改方法

linux下用户权限的修改方法

用户权限,方法,修改,电脑软件,linux,评论:我们知道Linux一般都是新用户,没有权限。在它的目录下没问题。你想给他许可。您需要根据文件或命令设置权限。chmod命令用于改变。 我们每天都会遇到修改用户的权限,用户往往是要么修改gorupid,通过上…

Word2003使用样式设置文本格式

Word2003使用样式设置文本格式

文本,设置,样式,格式,电脑软件,样式是应用于文档的文本和窗体。(表格:表单是由一行或多行单元格组成的。它用于显示数字和其他项目,以便快速引用和分析。表中的项目被组织成行和列。以及一组可以快速改变文档外观的列表的格式化功能。 例如,不…

Linux学习日记五磁盘和文件系统管

Linux学习日记五磁盘和文件系统管

学习,系统管理,磁盘,和文,日记,点评:本系列文章主要是关于用刀编写的linux相关学习资料。本文主要介绍linux下磁盘文件系统的管理。 三个重要概念 *超级块:记录文件系统的整体信息,包括inode /块的数量、使用量、剩余量,和文件系统格式和相关…