笔记源自---PHP必须知道的300个问题
一、提高编程效率
1、echo中字符串用单引号包含起来会比用双引号快。
2、$row['id']的速度要比$row[id]快很多。
3、echo比print快,并且使用echo的多重参数代替字符串连接(比如:echo $str1,$str2;)
4、尽量使用foreach代替while和for循环。
5、注销那些不用的变量,尤其是大数组,以便释放内存。
6、尽量不使用_get、_set、_autoload。(我不会用的,因为不知道用法哈哈哈)
7、使用include()包含文件时,尽量使用绝对路径,因为省去解析操作系统所需的时间。
8、获取脚本开始执行的时间 (即服务器端收到客户端请求的时间),使用$_SERVER['REQUEST_TIME']要优于time()。
9、在项目中尽量应用PHP内置函数,同时尽量使用函数代替正则表达式完成相同的功能。
10、str_replace函数比preg_replace函数快,但strtr函数效率比str_replace函数高。
11、选择分支语句switch优于多个if、else if语句。
12、连接数据库时,尽量使用短连接,要及时关闭使用完毕的数据库连接。
13、在方法中递增局部变量速度是最快的,相当于在函数中调用局部变量。
14、派生类中的方法运行起来要快于在基类中定义同样的方法,尽量将类的方法定义成static。
15、尽量少进行文件操作。
16、Apache解析一个PHP脚本时间要比解析一个静态HTML页面慢很多,多用HTML页面,少用PHP脚本。除非脚本可以缓存,引入PHP缓存机制可以免除编译开销,提升性能。
17、$i++会比++$i慢。
18、检验字符串长度时常用strlen(),也可以使用isset()加速执行代码。
$str='www.baidu.com';if(strlen($str)<5){ echo "未满5";}if(!isset($str{5})){ echo "未满5";}
二、为什么页面间无法传递变量?
为了提高安全性,在php.ini中的register_globals的值为Off。若想获取表单提交的数据,则必须使用$_GET['']、$_POST['']或$_SESSION['']。
使用$_SESSION['']保存变量值后任何页面都可以使用,但很耗费系统资源,慎用。
三、如何从文本中移除空白内容?
trim()函数
四、如何获取上传文件的后缀?
explode()
$file = 'xy.png';$arr=explode('.', $file);echo end($arr); //end()返回数组的最后一个元素
strstr():获取一个指定字符串在另一个字符串中首次出现的位置到后者末尾的子字符串。区分大小写。
$file = 'xy.png';$name = strstr($file,"."); //变量name的值为 .png
五、如何实现货币数据的格式化输出?
number_format(number,decimals,decimalpoint,separator)
echo number_format("5000000"); //5,000,000echo number_format("5000000",2); //5,000,000.00echo number_format("5000000",2,",","."); //5.000.000,00
六、如何解决对中文字符串截取时的出现乱码
substr()是按字节截取字符串的,一个英文占一个字节,一个中文占两个字节,而对于一个UTF-8的中文字符,会把它当做3个字节来处理。所以只要计算清楚就没问题。
Php给出了另外的函数mb_strlen和mb_substr。它会将为UTF-8编码的中文字符算作一个。
注意:mb_strlen与mb_substr并不是PHP的核心函数,使用前需要打开php.ini中的extension=php_mbstring.dll这一项。
七、如何获取多个数组元素的键名
$a=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");echo array_search("X5",$a); //返回第一个匹配的键名print_r(array_keys($a)); //返回数组中所有的键名print_r(array_keys($a,"Highlander")); //只返回该值的键名
array_keys(array,value,strict)
八、数组索引加单引号、双引号或无引号有区别吗?
第一种:$array['key'] 直接被解析为一个数组即$array
第二种:$array["key"] 先执行的是"key",判断是否有定义的PHP变量存在,再解析为数组即$array
第三种:$array[key] 会先分析局部作用于是否有key键值定义的常量存在,即define('key','val'),然后解析数组即$array
九、如何对查询关键字进行描红?
if($_POST[submit]) //搜索按钮{ $a = "".$_POST[text].""; echo str_replace("$_POST[text]",$a,$str); //$_POST[text]为关键字,$a为描红的字符串,$str变量为被搜索的文本,}
十、屏蔽违禁词语
①先将违禁词语放在文本文件。
②file_get_contents()获取文本内容。
③trim()去掉获取到的文本的空白,explode()转成数组。(注:explode("\n",$content) 加双引号)
④循环判断文章是否有违禁词语。strpos($text,$arr[$i]) (注:$text是文章内容变量,$arr[$i]是违禁词语数组)
十一、如何创建新型字符串
$ip=<<