《PHP编码技巧-.pdf》由会员分享,可在线阅读,更多相关《PHP编码技巧-.pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PHP编码技巧.txt小时候觉得父亲不简单,后来觉得自己不简单,再后来觉得自己孩子不简单。越是想知道自己是不是忘记的时候,反而记得越清楚。PHP 是一门松散类型的语言(Loosely Typed Language)1:如果一个方法能被定义成静态的static,那么定义成静态的速度可快25%2:echo 的效率高于print,因为 echo 没有返回值3:在循环之前设置最大的次数,而不是在循环之中4:销毁变量去释放内存,特别是大的数组unset()只能销毁超过256 个字节的变量内存,否则空间是不被释放的结论一、unset()函数只能在变量值占用内存空间超过256 字节时才会释放内存空间。结论二
2、、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。5:避免使用 _construct,_destruct,_call,_callStatic,_get,_set,_isset,_unset,_sleep,_wakeup,_toString,_set_state,_clone and _autoload 等魔术方法6:避免 require_once()比较耗资源7:在 include,或者是 require中尽量使用绝对路径,减少分析时间8:如果你需要得到脚本的执行时间那么用$_SERVERREQUEST_TIME 要优于 time();9:用 掩盖错误会降低运行速度10:养成
3、对数组健加引号的习惯,这样速度会快7 倍如:$_rowid与$_rowid;11:错误信息很有用12:在循环里别用函数,如count()在外面先计算13:在方法里面建立局部变量速度快14:全局变量几乎要比局部变量慢2 倍15:对象属性要双局部变量慢3 倍16:初始化的局部变量要比未定义的局部变量快9-10 倍17:子类的方法性能优于基类方法18:只调用一个参数并且函数体为空的函数运行花费的时间等于7-8 次$localvar+运算,而一个类似的方法(类里的函数)运行等于大约15 次$localvar+运算;19:当用 echo 输出字符串时用逗号代替点运行快些20:在 apache 服务器里一
4、个php 脚本页面比相应的HTML静态页面生成至少要多花2-10 倍的时间,建议多用些静态HTML 页面和少量的脚步;21:除非你的安装了缓存,不然你的php 脚本每次被访问都需要被重编译。建议安装个php缓存程序,这样通过去除一些重复的编译来很明显的提高你20-100%的性能;22:建议用memcached,高性能的分布式内存对象缓存系统,提高动态网络应用程序性能,减轻数据库的负担;23:使用 long2ip()或者是 ip2long()函数将 IP 地址转换成整型存入数据库,能降低25%的存储空间,同时也可以很容易对IP 进行排序和快速查找24:考虑使用mysql_*的改良函数mysqli
5、_*;25:尽量优先使用三元运算符(a?a:b;)26:注意使用PEAR资源库27:使用 error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机,php.ini你不能修改,那 么 你 最 好 添 加error_reporting(0)函 数,放 在 每 个 脚 本 文 件 的 第 一 行(或 用require_once()来加载)这能有效的保护敏感的SQL查询和路径在出错时不被显示;28:使用 gzcompress()和 gzuncompress()对容量大的字符串进行压缩和解压再存进和取出数
6、据库时,这种内置函数使用gzip 算法能压缩到90%;29:接受函数参数的函数func_get_args();返回的是一个参数组成的数组30:使用 glob 查找文件如 glob(*.php)glob(*.php,txt)glob(./images/a*.jpg)31:如果你想查看文件的完整路径那么可以用realpath();32:魔 术 常 量_LINE_ _FILE_ _DIR_ _FUNCTION_ _CLASS_ _METHOD_ _NAMESPACE_ 33:在 sql 语句中可以添加限制条件:left(text,20)只取出 text文本的前20 个字34:可以使用LIMIT fr
7、omRecord,recordNum来作为分页使用,35:两个表的连接可以是:table1 join table2 using x(x为两个表的公共字段)或者是table1 join table2 on table1.x=table2.x 36:在 mysql 插入语句中如果是自增字段要用NULL代替37:php中 文乱码问题mysql_query(set names gb2312);或者使用icon(GBK,UTF8,string)函数;38:使用迭代,线性,增量式的敏捷开发39:启用 disable_functions提高安全性,在php.ini中打开40:尽量使用PHP内置函数41:不要
8、将方法细分过多42:str_replace函数比 preg_replace函数快,但 strtr函数的效率是str_replace函数的四倍。42:PHP 在 windows 和 LINUX下的路径分隔符 DIRECTORY_SEPARATOR(windows下的是和/,而 LINUX下的是/)43:date_default_timezone_get()获得服务器的时区如UTC 44:取得变量的类型 string gettype(mixed var);45:返回由对象属性组成的关联数组 get_object_vars(obj)46:使用 strlen()函数47:使用 strpos()函数st
9、rpos()函数用于在字符串内检索一段字符串或一个字符。strpos(Hello world!,world);48:PHP 的真正威力源自于它的函数。在 PHP 中,提供了超过 700 个内建的函数。49:mktime()函数mktime()函数可为指定的日期返回 Unix 时间戳。mktime(hour,minute,second,month,day,year,is_dst)50:PHP 引用文件服务器端引用(SSI)用于创建可在多个页面重复使用的函数、页眉、页脚或元素。服务器端引用(Server Side Includes)51:打开文件fopen()函数用于在 PHP 中打开文件。52:
10、检测 End-of-file feof()函数检测是否已达到文件的末端(EOF)。在循环遍历未知长度的数据时,feof()函数很有用。53:逐行读取文件fgets()函数用于从文件中逐行读取文件。注释:在调用该函数之后,文件指针会移动到下一行。54:逐字符读取文件fgetc()函数用于从文件逐字符地读取文件。注释:在调用该函数之后,文件指针会移动到下一个字符。55;通过使用 PHP 的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。*$_FILESfilename-被上传文件的名称 *$_FILESfiletype-被上传文件的类型 *$_FILESfilesize-被上传文件
11、的大小,以字节计 *$_FILESfiletmp_name-存储在服务器的文件的临时副本的名称 *$_FILESfileerror-由文件上传导致的错误代码56:保存被上传的文件 move_uploaded_file($_FILESfiletmp_name,upload/.$_FILESfilename);57:PHP Cookies setcookie()函数用于设置 cookie。注释:setcookie()函数必须位于 标签之前。setcookie(name,value,expire,path,domain);如何删除 cookie?setcookie(user,time()-3600)
12、;58:PHP Sessions PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。注释:session_start()函数必须位于 标签之前:终结 Session unset($_SESSIONviews);59:PHP 发送电子邮件PHP mail()函数用于从脚本中发送电子邮件。mail(to,subject,message,headers,parameters)60:PHP 防止 E-mail 注入$field=filter_var($field,FILTER_SANITIZE_E
13、MAIL);61:PHP 错误处理*简单的 die()语句*自定义错误和错误触发器*错误报告62:基本的错误处理:使用 die()函数 die(File not found);63:创建自定义错误处理器error_function(error_level,error_message,error_file,error_line,error_context)64:Set Error Handler PHP 的默认错误处理程序是内建的错误处理程序。我们打算把上面的函数改造为脚本运行期间的默认错误处理程序。可以修改错误处理程序,使其仅应用到某些错误,这样脚本就可以不同的方式来处理不同的错误。不过,在本
14、例中,我们打算针对所有错误来使用我们的自定义错误处理程序:set_error_handler(customError);65:触发错误这个任务由 trigger_error()完成。66:错误记录通过使用 error_log()函数,您可以向指定的文件或远程目的地发送错误记录。67:通过 E-Mail 发送错误消息 error_log(Error:$errno$errstr,1,From:);68:PHP 异常处理异常(Exception)用于在指定的错误发生时改变脚本的正常流程。PHP 5 提供了一种新的面向对象的错误处理方法。*异常的基本使用 *创建自定义的异常处理器 *多个异常 *重新抛
15、出异常 *设置顶层异常处理器Try,throw 和 catch 1.Try-使用异常的函数应该位于 try 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。2.Throw-这里规定如何触发异常。每一个 throw 必须对应至少一个catch 3.Catch-catch 代码块会捕获异常,并创建一个包含异常信息的对象 catch(Exception$e)echo Message:.$e-getMessage();创建一个自定义的 Exception 类class customException extends Exception.69:PHP 过滤器(Fil
16、ter)PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。*来自表单的输入数据 *Cookies *服务器变量 *数据库查询结果70:函数和过滤器如需过滤变量,请使用下面的过滤器函数之一:*filter_var()-通过一个指定的过滤器来过滤单一的变量 *filter_var_array()-通过相同的或不同的过滤器来过滤多个变量 *filter_input-获取一个输入变量,并对它进行过滤 *filter_input_array-获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤71:Validating 过滤器:*用于验证用户输入 *严格的格式规则(比如 URL 或
17、 E-Mail 验证)*返回若成功预期的类型,否则返回 FALSE 72:Sanitizing 过滤器:*用于允许或禁止字符串中指定的字符 *无数据格式规则 *始终返回字符串73:净化输入首先,我们要确认是否存在我们正在查找的输入数据。然后,我们用 filter_input()函数来净化输入数据。74:过滤多个输入表单通常由多个输入字段组成。为了避免对 filter_var 或 filter_input 重复调用,我们可以使用 filter_var_array 或 the filter_input_array 函数。75:PHP Array 函数PHP 支持单维和多维的数组。同时提供了用数据库
18、查询结果来构造数组的函数。76:PHP Calendar 函数当使用不同的历法格式时,calendar 函数很有用。它所基于的标准是儒略日计数(Julian day count)。编者注:Julian day count 是从 January 1,4713 B.C.开始计算的,中文译为儒略日计数或恺撒日计数。请注意,Julian day count(儒略日计数)与 Julian calendar(儒略历)不是一回事。注释:如需在日历格式之间转换,必须首先转换为 Julian day count,然后再转换为日历格式。77:PHP Date/Time 函数date/time 函数允许您提取并格式
19、化服务器上的日期和时间。注释:这些函数依赖于服务器的本地设置。78:PHP Directory 函数Directory 函数允许您获得关于目录及其内容的信息。79:PHP Error 和 Logging 函数error 和 logging 函数允许你对错误进行处理和记录。error 函数允许用户定义错误处理规则,并修改记录错误的方式。logging 函数允许用户对应用程序进行日志记录,并把日志消息发送到电子邮件、系统日志或其他的机器。80:PHP Filesystem 函数Filesystem 函数允许您访问和操作文件系统。81:PHP Filter 函数PHP 过滤器用于对来自非安全来源的数
20、据(比如用户输入)进行验证和过滤。82:PHP FTP 函数FTP 函数通过文件传输协议(FTP)提供对文件服务器的客户端访问。FTP 函数用于打开、登录以及关闭连接,同时用于上传、下载、重名命、删除及获取文件服务器上的文件信息。不是所有 FTP 函数对每个服务器都起作用或返回相同的结果。自PHP 3 起,FTP 函数可用。这些函数用于对 FTP 服务器进行细致的访问。如果您仅仅需要对 FTP 服务器进行读写操作,建议使用 Filesystem 函数中的 ftp:/wrapper。83:PHP HTTP 函数HTTP 函数允许您在其他输出被发送之前,对由 web 服务器发送到浏览器的信息进行操
21、作。84:PHP libxml 函数libxml 函数和常量与 SimpleXML,XSLT 以及 DOM 一起使用。85:PHP Mail 函数HTTP 函数允许您从脚本中直接发送电子邮件。要使邮件函数可用,PHP 需要已安装且正在运行的邮件系统。要使用的程序是由 php.ini 文件中的配置设置定义的。86:PHP Math 函数数学 (Math)函数能处理 integer 和 float 范围内的值。87:PHP MySQL 函数MySQL 函数允许您访问 MySQL 数据库服务器。88:PHP SimpleXML 函数SimpleXML 函数允许您把 XML 转换为对象。通过普通的属性
22、选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样。其中的一些函数需要最新的 PHP 版本。89:PHP String 函数String 字符串函数允许您对字符串进行操作。90:PHP XML Parser 函数91:PHP Zip File 函数压缩文件函数允许我们读取压缩文件。92:路径分隔符DIRECTORY_SEPARATOR:linux上就是/windows 上是93:get_include_path()=PATH_SEPARATOR是一个常量,在Linux系统中是一个:号,Windows 上是一个;号。所以编写程序时最好用常量 PATH_SEPARATOR 代替,否则如
23、果系统从 linux移植到 win 系统或反过来移植会出错!get_include_path取得当前已有的环境变量,加上前面的设置就是新的系统include 94:get_include_path()设置包含路径set_include_path(get_include_path().PATH_SEPARATOR.$path);比如你有一个文件夹:命名为include,里面有数据库连接文件:conn.php ,你这样设置:set_include_path(/include)那么以后你就直接可以在其他页面中使用include(conn.php)这不是经常见到吗?它参数就字符串,当然你也可以设置多个
24、路径,中间用;分开,95:spl_autoload_functions()返回所有已注册的_autoload()函数。96:spl_autoload_register()spl_autoload_register()函数应该是主流框架使用最多的也是非常核心的函数之一,可实现自动注册函数和类,实现类似 _autoload()函数功能,简化了类的调用与加载,提高了工作的效率,这里通过一个实验谈谈这个函数的部分特征。97:const 是常量,即从程序运算开始到结束,数值不变的量。static 用于变量,声明这个变量的存储单元静态分配,从程序运算开始到结束这个变量的存储单元不变化。static常用于全
25、局量,一是存在里面的值始终有效,不因进退出子程序数值消失,另外static的变量运算速度比非静态分配的快。98:is_callable()function someFunction()$functionVariable=someFunction;var_dump(is_callable($functionVariable,false,$callable_name);/bool(true)99:mb_internal_encoding()设置/获取内部字符编码mb_internal_encoding(UTF-8);在 php.ini 里 搜索 dll,找到 mb 开头的 dll 将前面的分号去掉
26、,重启apache or iis 100:instanceof instanceof是 php5 为面向对象引入的php 中唯一的类型运算符。在 php5 之前通过is_a()实现,现在已经不推荐使用了。instanceof用来检测一个给定的对象是否属于(继承于)某个类(class)、某个类的子类、某个接口(interface)。如果是则返回true。看下面的一段代码,很容易理解。if(object instanceof class name)/继承关系/101:gmdate()用法time()函数是获得当前的时间戳$times=gmdate(Y-m-d H:i:s,time();用$time
27、s 这样直接就可以插入你说的数据库!102:php_sapi_name()主要用途是判断提供PHP接口的 WEB 服务是什么类型比如是 Apache,还是 IIS 或者 Nginx.103:header(Status:304 Not Modified);头(状态:304 未修改 );是 client与 server响应不一致的时候header(HTTP/1.1 304 Not Modified);头(HTTP/1.1的 304 未修改 );104:ucfirst()首字母大写105:array_unique()函数array_unique()函数移除数组中的重复的值,并返回结果数组。当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。返回的数组中键名不变。106:class_exists()107:array_pop($arr)删除数据最后一个值108:serialize($data)有的时候为了把一些数据转为字符串存起来,但是希望保持数据原来有结构和内容。就要用到这个函数。unserialize($data)把描述过的数据恢复
限制150内