当前位置:  开发笔记 > 编程语言 > 正文

php字符串是不可变的吗?

如何解决《php字符串是不可变的吗?》经验,为你挑选了2个好方法。

或者:我应该在PHP中优化我的字符串操作吗?我试着询问PHP的手册,但我没有得到任何提示.



1> 小智..:

PHP已经对它进行了优化 - 使用copy-on-write分配变量,并通过引用传递对象.在PHP 4中它没有,但无论如何都没有人应该使用PHP 4来获取新代码.


我真的希望Rich B不要再将有效(英国)英语拼写转换为美国英语......并非所有人都来自美国.
@Ant P:手动输入含糊不清.他们想要说的是对象不存储在传递的变量中,而是传递指向实际数据的指针.但仍然这个指针是通过值传递的,而不是通过引用传递的.简单的例子表明:`function f($ obj){$ obj ='foo'; } $ obj = new stdClass; F($ OBJ); 后续代码var_dump($ OBJ);`.如果通过引用传递`$ obj`,它将打印''foo'`,而不是`'stdClass'.;)

2> Martin Vahi..:

许多语言中最重要的速度优化技术之一是实例重用.在这种情况下,速度增加来自至少2个因素:

1.实例化程度越低意味着建筑时间越少.

2.应用程序使用的内存量越少,可能存在的CPU缓存丢失越少.

对于速度是第一优先级的应用程序,CPU和RAM之间存在真正严重的瓶颈.瓶颈的原因之一是RAM的延迟.

PHP,Ruby,Python等与缓存未命中有关,即使它们至少存储了RAM中解释程序的一些(可能是全部)运行时数据.

字符串实例化是经常以相对"大量"完成的操作之一,并且它可能对速度产生显着影响.

这是测量实验的run_test.bash:

#!/bin/bash

for i in `seq 1 200`;
do
        /usr/bin/time -p -a -o ./measuring_data.rb  php5 ./string_instantiation_speedtest.php
done

这是./string_instantiation_speedtest.php和测量结果:


我从这个实验和我使用Ruby 1.8做的另一个实验的结论是,通过引用传递字符串值是有意义的.

在整个应用程序范围内允许"按引用传递字符串"的一种可能方法是,只要需要使用字符串的修改版本,就可以始终如一地创建新的字符串实例.

为了增加位置,因此增加速度,可能希望减少每个操作数消耗的内存量.以下实验演示了字符串连接的情况:


例如,如果一个人组装包含大量文本的HTML页面,那么人们可能想要考虑顺序,生成的HTML的不同部分如何连接在一起.

可以使用BSD许可的PHP实现和分水岭串联连接算法的Ruby实现.同样的算法可以(已经由我)推广以加速任意精度整数的乘法.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有