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

PHP参考是一个坏习惯。

PHP参考是一个坏习惯。
复制代码代码如下所示:
功能折半查找($ ARR,美元价值的关键,)
{
低= 0;
$高=计数($ ARR);
虽然(低$高){
美元=地板(低美元+($高-低) 2);
项目=美元美元美元美元中期} { ARR {重点};
如果($ = $ value){
返回$中;
否则}如果($ > $项目){
$ = $中+ 1;
{人}
高= 1美元;
}
}
返回false;
}

在这种情况下,为了减少整数的溢出,采用先减后加的方法计算中间值,这不是有意写的。
我使用以下代码进行测试:
复制代码代码如下所示:
$ =数组();
($ i = 0;$ i < 1000000;$ + +)
{
$数据=数组(SQ = $ i * 2);
}
var_dump(折半查找(美元的数据,平方

当谈到折半查找,它总是需要0.2s.in理论,在大多数的数据,100万,是20个周期。怎么这么慢。
后来,记忆监控和数据数组占用的内存230m,折半查找,它占用60K的记忆。但是,在理论上,Binsearch
这么多内存不应该占用,因为我认为我使用了引用,而且数据的结构根本没有改变。
我也一百想去解决它,后来,我删除了参考参数,其实只要0.0002s折半查找,它似乎是一个参考的成本大量的CPU资源。
PHP遵循写复制的原则,事实上,这个引用是多余的。
但是,为什么以参考的速度,会比较慢呢今天的重点是这个问题。当你了解真相时,你必须知道如何使用它。
如果美元=美元之前数据直接折半查找电话本参考速度会很快。当然,似乎没有一个自己的问题。
其实这个问题,,涉及到Zend引擎管理PHP变量。
首先看下面的问题:
复制代码代码如下所示:
< PHP
函数演示($ A,b){ $ A = $;}
$ = 1;
$ = 2;
演示(A,B);
$ = 3;
打印$;
>

A的输出是多少是的,是2点,但我开始认为是3点。
那么你如何解释上面的问题呢
事实上,函数的参数引用就是这样完成的。
复制代码代码如下所示:
$ $ = $;
$ A1 = $ TMP;
美元= TMP;
unset($ A1,$ TMP);

这里,引用实际上是一个临时变量。此时,TMP是一个引用属性,而$变量不是引用属性。
根据管理内存的方法由Zend引擎,在室内,这是不可能使用一个变量来表示,它必须被迫分离变量。
有了这样的理解方法,上述问题就解决了,在函数内部,函数的引用特性没有改变,这也是PHP。
不赞成使用calltime_by_ref原因,选择这样一个低效的复制方法。
下面的分析还表明,当参数传递时,复制确实发生。
在折半查找功能。
$ { 0 } = 1;
这样,会有一个复制的机制,数据位于美元。内存使用量是60K。函数调用是完全一样的参考。
也许很多人会疑问,为什么没有更多的2.3亿,这实际上是PHP的明亮的地方,数组的键对应一个变量的指针。(内部哈希表)
所以,只要复制这些指针只是一次,而数据没有被复制。然而,PHP的哈希表100万实际占用50m记忆。为什么只有60k
在折半查找功能,运行
复制代码代码如下所示:
$ $ = $数据;
$ { 0 } = 1;
设置(T);

果然,60K内存更多。估计是PHP的内存管理机制。
现在一切都清楚了,今天,我想几个小时来思考这个问题,不敢独自享受它。
引用函数不是为您方便地传递参数,而是让您认识到,一个函数可以有多个返回值,所以最好不要多余。
事实上,引用它可以降低性能。

相关文章

可以同步助手安装PXL应用(解决方案)

可以同步助手安装PXL应用(解决方案)

安装,解决方案,同步,助手,电脑软件,问题: 可以同步助手安装PXL应用 答案uff1a 容许 u3002 然而,同步助手将PXL到IPA PXL安装的应用。 转换成IPA PXL的好处是你想删除的应用程序仍然使用同步助手来删除它。这将是完全清楚的,没有遗留下来。 …

在第1行中解析SOAP有效负载的PHP错

在第1行中解析SOAP有效负载的PHP错

错误,负载,电脑软件,SOAP,PHP,Web服务,它必须是大家所熟悉的,是一种提供服务提供商与服务商。它有几个关键技术: xml:描述数据的标准方法 SOAP:用于信息交换的简单对象访问协议 Web服务描述语言 UDDI:通用描述、发现和集成,是一种基于XML语言的独…

为什么最近到QQ空间的访问者不符合

为什么最近到QQ空间的访问者不符合

空间,数量,访问者,访客,不符合,QQ空间中心(最近的访客朋友展示-最近的访客)黄色的用户可以支持多达100人看到,大多数普通用户可以查看30。如果QQ空间已被访问,查询不来访问。请检查它是否如下: 1。删除访问记录; 1,当一个朋友进入你的QQ空间时,你…

金山边界防御菜单(解决方案)

金山边界防御菜单(解决方案)

菜单,解决方案,边界,电脑软件,今天,在我们的软件中遇到了一些问题,原因是金山毒霸设置安全,要重装。根据我们提供的信息,点击金山词霸设置菜单,打开设置窗口,找不到边防菜单。 经过探索,找出了原因,原来金山毒霸边防;菜单改为开放互联网保护;互联网;…

linux环境下进程间通信:管道和著名

linux环境下进程间通信:管道和著名

进程间通信,著名,环境,电脑软件,linux,评论:管道和著名管道 在这个系列中,作者概述了Linux进程间通信的几种主要手段之间的管道和命名管道是最早的进程间通信机制。管道可以用于亲属进程之间的通信。一个著名的管道克服了管道名称的局限性,具…

uzqkst是uzqkst.exe-过程

uzqkst是uzqkst.exe-过程

过程,电脑软件,uzqkst,exe,评论:uzqkst.exe - uzqkst过程 进程文件:uzqkst或uzqkst.exe 进程名称:UltimateZip 过程类别:安全风险的过程 英文描述: uzqkst.exe是一个过程,属于流行的免费软件,免费软件,它的UltimateZip,也被称为是对与错。 中文参考…

Linux操作系统下SSH缺省22端口修改

Linux操作系统下SSH缺省22端口修改

修改,方法,操作系统,端口,电脑软件,注释:有时要考虑服务器的安全性,我们需要修改SSH的默认22端口,您需要的朋友可以参考它。 第一步:如果您想通过SSH将IP限制到Linux,您可以如下所做: 首先:修改/等/在hosts.deny文件直到找到匹配。,加入sshd:所有,…

linux下多进程批处理的方法

linux下多进程批处理的方法

多进程,方法,批处理,电脑软件,linux,评论:linux下批量杀进程的方法,有需要的朋友可以参考一下 PS - EF | grep地方=没有| grep -v grep |切C 9-15 | xargs杀9 管字| 用来分隔两个命令,对管道字符左边的命令的输出是在管的字符正确的命令输入…

系统重装后oracle数据库完全恢复的

系统重装后oracle数据库完全恢复的

完全恢复,数据库,系统重装,解决方案,电脑软件,昨天,服务器出现磁盘故障,C数据丢失,重新安装操作系统,数据还原方法完全在事故发生前完成: 根据原来的配置(安装路径,实例名,用户名,密码)后,重新安装Oracle,离开Oracle文件夹拷贝完全覆盖当前的Oracle新…

如何清除搜索记录win7win7搜索历史

如何清除搜索记录win7win7搜索历史

搜索,历史记录,删除,清除,教程,点评:Win7的搜索功能是非常强大的,智能。在搜索数据之后,它会在搜索栏中留下一个记录,以便显示个人隐私。因此,有必要清除Windows 7搜索记录。下面的步骤可以帮助你。 win7的搜索功能很强大,智能。在搜索数据之后,它…

Win8.1VPN建立连接错误,一个简单的

Win8.1VPN建立连接错误,一个简单的

连接,解决方案,错误,简单,电脑软件,点评:在Win8.1常用的VPN设置总是显示连接错误。下面介绍如何在Windows 8.1平台下建立VPN连接。有兴趣的朋友可以参考一下。 Win8.1上市还有近一个月,这带来了很多改进的界面和操作方法,但也带来了很多麻烦之…

Word2010技巧十二帮助你跳到主

Word2010技巧十二帮助你跳到主

跳到,技巧,帮助你,电脑软件,在Word 2010的办公室里,说话技巧可以事半功倍。现在我们将分享十二字和2010项技能,使你成为一名优秀的上班族。 1。使用编辑-选择性粘贴功能编辑和复制文本信息是很方便的。 我们有时会在软件界面中复制选定的区…