36计教您如何提高 36计教您如何提高 PHP 代码质量
代码质量,供开发者学习与参考。 文中主要探讨了如何提高
PHP 代码质量,供开发者
学习与参考。 1.不要使用相对路径 不要使用相对路径 常常会看到: 1 require_once('../../lib/some_class.php');
该方法有很多缺点: 它首先查找指定的 php 包含路径, 然后查找当前目录. 因此会检查过多路径. 如果该脚本被另一目录的脚本包含, 它的基本目录变成了另一脚本所在的目录. 另一问题, 当定时任务运行该脚本, 它的上级目录可能就不是工作目录了. 因此最佳选择是使用绝对路径: 2 3 4 5 //rest of the code define('ROOT' , '/var/www/project/'); require_once(ROOT . '../../lib/some_class.php');
我们定义了一个绝对路径, 值被写死了. 我们还可以改进它. 路径 /var/www/project 也可能会改变, 那么我们每次都要 改变它吗? 不是的, 我们可以使用__FILE__常量, 如: 6 7 8 9 10 11 12 //rest of the code define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME)); require_once(ROOT . '../../lib/some_class.php'); //suppose your script is /var/www/project/index.php //Then __FILE__ will always have that full path.
现在, 无论你移到哪个目录, 如移到一个外网的服务器上, 代码无须更改便可正确运行.
2. 不要直接使用 require, include, include_once, required_once
可以在脚本头部引入多个文件, 像类库, 工具文件和助手函数等, 如: 13 14 15 require_once('lib/Database.php'); require_once('lib/Mail.php'); require_once('helpers/utitlity_functions.php');
这种用法相当原始. 应该更灵活点. 应编写个助手函数包含文件. 例如: 16 17 18 19 20 21 22 23 24 load_class('Database'); load_class('Mail'); function load_class($class_name) { //path to the class file $path = ROOT . '/lib/' . $class_name . '.php'); require_once( $path ); beizhu.qqq23 }
有什么不一样吗? 该代码更具可读性. 將来你可以按需扩展该函数, 如: 25 26 function load_class($class_name) {
27 28 29 30 31 32 33 34 }
//path to the class file $path = ROOT . '/lib/' . $class_name . '.php');
if(file_exists($path)) { require_once( $path ); }
还可做得更多: 为同样文件查找多个目录 能很容易的改变放置类文件的目录, 无须在代码各处一一修改 可使用类似的函数加载文件, 如 html 内容.
3. 为应用保留调试代码 为应用保留调试代码
在开发环境中, 我们打印数据库
查询语句, 转存有问题的变量值, 而一旦
问题解决, 我们注释或删除它们. 然而更好的做 法是保留调试代码. 在开发环境中, 你可以: 35 36 37 38 39 40 41 42 43 44 45 46 47 } } } else { echo "Database error. Please contact administrator"; if(! $db->query( $query ) { if(ENVIRONMENT == 'development') { echo "$query failed"; define('ENVIRONMENT' , 'development');
在服务器中, 你可以: 48 49 50 51 52 53 54 55 56 57 58 59 }
} } else { echo "Database error. Please contact administrator"; define('ENVIRONMENT' , 'production'); if(! $db->query( $query ) { if(ENVIRONMENT == 'development') { echo "$query failed";
4. 使用可跨平台的函数执行命令 system, exec, passthru, shell_exec 这4个函数可用于执行系统命令. 每个的行为都有细微差别. 问题在于, 当在共享主
机中, 某些函数可能被选择性的禁用. 大多数新手趋于每次首先检查哪个函数可用, 然而再使用它. 更好的方案是封成函数一个可跨平台的函数。 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 01 /** 02 03 04 05 06 07 08 09 10 */ 11 function terminal($command) 12 { 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 } //shell_exec else if(function_exists('shell_exec')) { $output = shell_exec($comman