资源描述:
《php提高代码质量方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、php提高代码质量方法1.不要使用相对路径常常会看到:require_once('../../lib/some_class.php');该方法有很多缺点:它首先查找指定的php包含路径,然后查找当前目录.因此会检查过多路径.如果该脚本被另一目录的脚本包含,它的基本目录变成了另一脚本所在的目录.另一问题,当定时任务运行该脚本,它的上级目录可能就不是工作目录了.因此最佳选择是使用绝对路径:define('ROOT','/var/www/project/');require_once(ROOT.'../../lib/some_class.php');
2、//restofthecode我们定义了一个绝对路径,值被写死了.我们还可以改进它.路径/var/www/project也可能会改变,那么我们每次都要改变它吗?不是的,我们可以使用__FILE__常量,如://supposeyourscriptis/var/www/project/index.php//Then__FILE__willalwayshavethatfullpath.define('ROOT',pathinfo(__FILE__,PATHINFO_DIRNAME));require_once(ROOT.'../../lib/some
3、_class.php');//restofthecode现在,无论你移到哪个目录,如移到一个外网的服务器上,代码无须更改便可正确运行.2.不要直接使用require,include,include_once,required_once可以在脚本头部引入多个文件,像类库,工具文件和助手函数等,如:require_once('lib/Database.php');require_once('lib/Mail.php');require_once('helpers/utitlity_functions.php');这种用法相当原始.应该更灵活点.应编
4、写个助手函数包含文件.例如:functionload_class($class_name){//pathtotheclassfile$path=ROOT.'/lib/'.$class_name.'.php');require_once($path);}load_class('Database');load_class('Mail');有什么不一样吗?该代码更具可读性.將来你可以按需扩展该函数,如:functionload_class($class_name){//pathtotheclassfile$path=ROOT.'/lib/'.$cla
5、ss_name.'.php');if(file_exists($path)){require_once($path);}}还可做得更多:为同样文件查找多个目录能很容易的改变放置类文件的目录,无须在代码各处一一修改可使用类似的函数加载文件,如html内容.3.为应用保留调试代码在开发环境中,我们打印数据库查询语句,转存有问题的变量值,而一旦问题解决,我们注释或删除它们.然而更好的做法是保留调试代码.在开发环境中,你可以:define('ENVIRONMENT','development');if(!$db->query($query){if(EN
6、VIRONMENT=='development'){echo"$queryfailed";}else{echo"Databaseerror.Pleasecontactadministrator";}}在服务器中,你可以:define('ENVIRONMENT','production');if(!$db->query($query){if(ENVIRONMENT=='development'){echo"$queryfailed";}else{echo"Databaseerror.Pleasecontactadministrator";}}4.
7、使用可跨平台的函数执行命令system,exec,passthru,shell_exec这4个函数可用于执行系统命令.每个的行为都有细微差别.问题在于,当在共享主机中,某些函数可能被选择性的禁用.大多数新手趋于每次首先检查哪个函数可用,然而再使用它.更好的方案是封成函数一个可跨平台的函数./**MethodtoexecuteacommandintheterminalUses:1.system2.passthru3.exec4.shell_exec*/functionterminal($command){//systemif(function_e
8、xists('system')){ob_start();system($command,$return_var);$output=ob_get_con