21.使用phpfilter验证数据你肯定曾使用过正则表达式验证email,ip地址等.是的,每个人都这么使用.现在,我们想做不同的尝试,称为filter.php的filter扩展提供了简单的方式验证和检查输入.22.强制类型检查[code]$amount=intval($_GET[amount]);$rate=(int)$_GET[rate];[/code]这是个好习惯.23.如果需要,使用profiler如xdebug如果你使用php开发大型的应用,php承担了很多运算量,速度会是一个很重要的指标.使用profile帮助优化代码.可使用xdebug和webgrid.24.小心处理大数组对于大的数组和字符串,必须小心处理.常见错误是发生数组拷贝导致内存溢出,抛出FatalErrorofMemorysize信息:[code]$db_records_in_array_format;//Thisisabigarrayholdingrowsfromatableeachhaving20columns,everyrowisatleastbytes,sototal*20*=2MB$cc=$db_records_in_array_format;//2MBmoresome_function($cc);//Another2MB?[/code]当导入或导出csv文件时,常常会这么做.不要认为上面的代码会经常因内存限制导致脚本崩溃.对于小的变量是没问题的,但处理大数组的时候就必须避免.确保通过引用传递,或存储在类变量中:[code]$a=get_large_array();pass_to_function($a);[/code]这么做后,向函数传递变量引用(而不是拷贝数组).查看文档.[code]classA{functionfirst(){$this-a=get_large_array();$this-pass_to_function();}functionpass_to_function(){//process$this-a}}[/code]尽快的unset它们,让内存得以释放,减轻脚本负担.25.由始至终使用单一数据库连接确保你的脚本由始至终都使用单一的数据库连接.在开始处正确的打开连接,使用它直到结束,最后关闭它.不要像下面这样在函数中打开连接:[code]functionadd_to_cart(){$db=newDatabase();$db-query(INSERTINTOcart.....);}functionempty_cart(){$db=newDatabase();$db-query(DELETEFROMcart.....);}[/code]使用多个连接是个糟糕的,它们会拖慢应用,因为创建连接需要时间和占用内存.特定情况使用单例模式,如数据库连接.26.避免直接写SQL,抽象之不厌其烦的写了太多如下的语句:[code]spanstyle=color:#;font-family:Helvetica,Arial,sans-serif;$query=INSERTINTOusers(name,email,address,phone)VALUES($name,$email,$address,$phone);$db-query($query);//calltomysqli_query()/span[/code]这不是个建壮的方案.它有些缺点:每次都手动转义值验证查询是否正确查询的错误会花很长时间识别(除非每次都用if-else检查)很难维护复杂的查询因此使用函数封装:[code]spanstyle=color:#;font-family:Helvetica,Arial,sans-serif;functioninsert_record($table_name,$data){foreach($dataas$key=$value){//mysqli_real_escape_string$data[$key]=$db-mres($value);}$fields=implode(,,array_keys($data));$values=.implode(,,array_values($data)).;//Finalquery$query=INSERTINTO{$table}($fields)VALUES($values);return$db-query($query);}$data=array(name=$name,email=$email,address=$address,phone=$phone);insert_record(users,$data);/span[/code]看到了吗?这样会更易读和扩展.record_data函数小心的处理了转义.最大的优点是数据被预处理为一个数组,任何语法错误都会被捕获.该函数应该定义在某个database类中,你可以像$db-insert_record这样调用.查看本文,看看怎样让你处理数据库更容易.类似的也可以编写update,select,delete方法.试试吧.27.將数据库生成的内容缓存到静态文件中如果所有的内容都是从数据库获取的,它们应该被缓存.一旦生成了,就將它们保存在临时文件中.下次请求该页面时,可直接从缓存中取,不用再查数据库.好处:节约PHP处理页面的时间,执行更快更少的数据库查询意味着更少的mysql连接开销
点击“阅读原文”,轻松复制代码。
北京治疗白癜风哪个医院最好北京哪些医院白癜风疗效比较好