php 编程题 加法计算器:PHP内部字符串操作函数(1)(组图)php大赛编程题答案
2023-02-08
1串
1.1 少用正则表达式
如果可以使用PHP内部的字符串操作函数,尽量使用它们来代替正则表达式,因为它们的效率比正则表达式高。
不用说,正则化消耗的性能最多。
函数比函数快得多,函数比来得快。
您是否错过了一个有用的功能?
例如:(),(),(),(),(),()。
1.2 字符替换
如果您需要转换的只是单个字符,请使用字符串 as() 函数进行替换,而不是数组:
$addr = ($addr, "abcd", "efgh"); // 建议
$addr = ($addr, ('a' => 'e', )); // 不建议
效率提升:10倍。
字符替换比常规替换快,但比正则表达式快 1/4。
另外,不要做无意义的替换,即使没有替换也为它们的参数分配内存。 非常慢!
使用第一次查找(非常快)来查看是否需要更换,如果需要,则进行更换。
如果需要更换,效率几乎相等,相差约 0.1%。
如果不需要更换:使用速度提高 200%。
1.3 压缩大字符串
使用()和()压缩和解压一个大容量的字符串,然后存入和存出数据库。
这个内置函数使用了 gzip 算法,可以将字符串压缩 90%。
1.4 回声输出
使用逗号而不是点来回显字符串更快。
虽然,echo 是一种语言结构,而不是真正的功能。
但是,它可以将多个以逗号分隔的字符串作为“函数”参数传递,因此速度会更快。
回显 $str1, $str2; // 快速地
回显 $str1 。 $str2;// 有点慢
1.5 尽量使用单引号
PHP 引擎允许使用单引号和双引号来包裹字符串变量,但是它们的速度有很大的不同!
带双引号的字符串会告诉PHP引擎先读取字符串的内容,找到其中的变量,并更改变量对应的值。
一般来说,字符串是没有变量的,使用双引号会导致性能不佳。
最好使用字符串连接而不是双引号字符串。
$output = "This is a plain string"; // 不好的实践
$output = 'This is a plain string'; // 好的实践
$type = "mixed"; // 不好的实践
$output = "This is a $type string";
$type = 'mixed'; // 好的实践
$output = 'This is a ' . $type . ' string';
1.6 代替使用
在检查字符串的长度时,我们首先想到的是使用 () 函数。
这个函数执行得相当快,因为它不做任何计算,只返回存储在 zval 结构(C 的内置数据结构,用于存储 PHP 变量)中的字符串的已知长度。
但是,由于()是一个函数,或多或少会慢一些,因为函数调用会经过很多步骤php 编程题 加法计算器,比如小写字母,哈希查找,会和被调用的函数一起执行。
在某些情况下,您可以使用 () 技巧来加速代码的执行。 例如:
if (($foo) < 5) { echo "Foo is too ";}// 使用 ()
if (!($foo{5})) { echo "Foo 太强了 ";}
1.7 分割字符串
() 在拆分字符串时比 () 快。
split()
0.001813 - 0.002271 seconds (avg 0.002042 seconds)
explode()
0.001678 - 0.003626 seconds (avg 0.002652 seconds)
1.8 echo 比
因为 echo 没有返回值,它返回一个整数。
注意:当echo输出的字符串比较大时,不调整会严重影响性能。
打开压缩,或打开将内容放入缓冲区,可以改善性能问题。
2个陈述
2.1 最好不要用@
用 @ 屏蔽错误会减慢脚本速度,并在后台进行大量额外工作。
与不使用@相比,效率差距是3倍。 特别是不要在循环中使用@。
5循环测试,即使先用(0)关闭报错,循环完成后再打开,也比用@快。
2.2 避免使用魔术方法
以__开头的函数称为魔法函数,它们都是在特定条件下触发的。
这些魔法函数包括:()、()、()、()等。
以()为例,如果无法将类名与实际的磁盘文件相匹配,则需要进行大量的文件存在性判断。
而判断文件是否存在需要磁盘I/O操作。 众所周知,磁盘I/O操作的效率是很低的,所以这就是降低机制效率的原因。
因此,在设计系统时,需要定义明确的类名到实际磁盘文件的映射机制。
规则越简单明了,()机制的效率就越高。
该机制并非天生效率低下,只是自动加载功能的滥用和设计不当会导致其效率降低。
因此,尽量避免使用这种魔术方法是值得商榷的。
2.3 不要在循环中使用函数
例如:
for($x=0; $x < count($array); $x++) {
}
这种写法每次循环都会调用()函数,效率大大降低。 建议这样做:
$len = count($array);
for($x=0; $x < $len; $x++) {
}
让函数在循环外一次获取循环计数。
2.4 使用三元运算符
在简单的判断语句中,三元运算符?:更加简洁高效。
2.5 使用替代分支语句
, case 比使用多个 if, else if 语句要好,代码更易阅读和维护。
2.6 屏蔽敏感信息
使用 () 函数可以防止向用户显示潜在的敏感信息。
理想情况下,应该在 php.ini 文件中完全禁用错误报告。
如果你使用的是共享虚拟主机,php.ini不能修改,最好加上()函数。
放在每个脚本文件的第一行,或者用()加载,可以有效保护敏感的SQL查询和路径,出错时不会显示。
2.7 不实用的 tags 鼓励使用这种方法,可以使代码更简洁。
2.8 没有关闭标签的纯PHP代码
如果文件内容是纯 PHP 代码,最好去掉文件末尾的 PHP 结束标记 ?>。
这可以防止在结束 PHP 标记后意外包含空格或换行符,这会导致 PHP 在脚本无意输出这些空格时开始输出它们。
2.9 切勿使用和
这是两个非常古老的特性,在当时(十年前)可能是一个很好的方法,但现在似乎并非如此。
旧版本的 PHP 安装时默认打开这两个功能,这可能会导致安全漏洞、编程错误和其他问题。
例如,只有当用户输入数据时才会创建变量等。
这两个函数从PHP5.4.0开始就被废弃了,所以每个程序员都应该避免使用它们。
如果你过去的程序使用了这两个函数,请尽快将它们移除。
3个功能
3.1 尝试使用PHP内部函数
内置函数用C语言实现,并经过PHP官方优化,效率更高。
3.2 使用绝对路径
尝试在 和 中使用绝对路径。
如果包含相对路径,PHP 将遍历内部以查找该文件。
使用绝对路径会避免此类问题php 编程题 加法计算器,并且解析路径所需的时间会更少。
3.3 包含文件
尽量不要使用和文件,他们多了一个判断文件是否被引用的过程,尽量不要使用。
并使用, 方法代替。
鸟哥在博客中多次声明尽量不要使用 and 。
3.4 函数比类方法快
调用一个只有一个参数且函数体为空的函数所花费的时间相当于 7-8 次 $++ 操作。
具有相同功能的类方法大约是15个$++操作。
3.5 使用子类方法
只有可重用的方法放在基类中,其他功能尽量在子类中实现。 子类中方法的性能优于基类中的方法。
3.6 一个类的性能与方法的数量无关
在测试类中添加 10 个或更多新方法后,性能没有差异。
3.7 读取文件内容
当可以用()代替file()、()、feof()、()等系列方法时,尽量使用()。
因为他效率更高!
3.8 通过引用传递参数
通过参数地址引用的方式,实现了函数的多个返回值,比传值更高效。
方法是在参数变量前加一个&。
3.9 方法不宜细分太多
仔细想想你真正要重用的代码是什么?
3.10 尽量保持静态
如果一个方法可以是静态的,那么声明它是静态的,速度可以提高1/4,甚至我测试的时候,这提高了将近三倍。
当然,这个测试方法需要在10万级以上执行,效果才会明显。
事实上,静态方法和非静态方法的效率的主要区别在于内存。
静态方法在程序开始时产生内存,实例方法(非静态方法)在程序运行时产生内存。
所以静态方法可以直接调用,而实例方法在调用前需要生成一个实例。 静态的速度很快,但是多了会占内存。
任何语言都在内存和磁盘上运行。 至于是否面向对象,只是软件层的问题。 底层是一样的,只是实现方式不同。
静态内存是连续的,因为它是在程序一开始就产生的网站模板,而实例方法申请的是离散空间,当然不如静态方法快。
静态方法总是调用同一块内存,缺点是不能自动销毁,但实例化可以销毁。
3.11 C扩展的实现
如果代码中有很多耗时函数,可以考虑用C扩展来实现。
4个变量
4.1 及时销毁变量
数组、对象、变量在PHP中占用内存较多,这是PHP底层的zend引擎造成的。
一般来说,PHP数组的内存利用率只有1/10。
也就是说在C语言中一个100M内存的数组在PHP中需要1G。
特别是在使用PHP作为后台服务器的系统中,经常会出现内存消耗过大的问题。
4.2 使用$变量
如果需要获取脚本执行时间,$[''] 比time()更好。
一个是现成的,可以直接使用,一个是需要函数的结果。
4.3 方法中建立腾云网络
在类的方法中建立腾云网络是最快的,几乎和在方法中调用腾云网络一样快。
4.4 腾云网络比全局变量更快
因为腾云网络存在于栈中。
当一个函数占用的栈空间不是很大的时候,这部分内存很可能被打的一干二净,CPU访问的效率很高。
反之,如果一个函数同时使用全局变量和腾云网络,当两个地址相差较大时,CPU需要来回切换,效率会下降。
4.5 腾云网络代替对象属性
创建对象属性(类中的变量网站优化,例如:$this->prop++)比腾云网络慢3倍。