PHPer 高手之路
  • Introduction
  • First Chapter
  • 基础
    • 数据类型和常量
    • 字符串
      • 字符编码
      • 字符编码相关编程
    • 引用变量
    • 运算符与错误控制符@
    • 流程控制与条件判断
      • foreach遍历中的引用
    • 函数
    • 文件及目录处理
  • PHP 数组
    • 基础
    • PHP数组操作
    • 输入流 php://input
    • PHP数组的内部实现
    • PHP数组和数据结构
    • 示例技巧
  • PHP文件编程
    • 文件系统
    • 基础
    • 实例技巧
    • PHP中XML处理
    • PHP中JSON处理
    • PHP中CSV处理
    • 大文件上传
  • 正则表达式
    • 基础
    • 正则的引擎
    • 表达式的优化
    • PHP中正则的使用
  • PHP 编码技巧
    • PHP编码习惯
    • PHP语法糖
    • PHP代码优化
    • PHP重点新特性
    • PHP编码规范
  • PHP选项和运行原理
    • PHP SAPI
    • PHP运行模式及安装方式
    • 附录:进程和线程的Q解
    • Apache下的MPM模式
    • Apache 与 Nginx
    • PHP的运行机制及原理
    • PHP垃圾回收机制
    • PHP配置选项
  • PHP安全
    • 跨站脚本攻击(XSS )
    • 跨站请求伪造(CRSF)
  • PHP 高级特性
    • 异常处理(Exceptions)
    • 代码复用(Trait)
    • 预定义接口(Predefined Interfaces)
    • 魔术方法(Magic Methods)
    • 回调函数、匿名函数&闭包
    • 命名空间(Namespaces)
    • 自动加载(Autoload)
    • 反射(Reflection)
    • 魔术常量(Magic constants)
    • 综合实例
  • 附录:关键词
  • 附录:资料
  • 代码的版本控制
    • SVN
    • Git
      • 疑难杂症
  • Linux
    • Linux原理与基础
    • 常见命令
    • Shell 编程
    • awk 与 sed
    • 命令笔记
  • HTTP 协议
    • 请求方法与返回状态码
    • Cookie、Session 的原理
  • MySQL
    • MySQL表存储引擎
  • 标准PHP库(SPL)
    • 数据结构
      • SplPriorityQueue - 优先队列
      • SplQueue - 队列
      • SplStack - 栈的功能
    • 接口
      • Countable - count统计接口
  • 附录:ElasticSearch
  • PHP数据结构
  • 附录:Rabbitmq
  • 附录:guzzle
  • JavaScript
    • 附录:资料
  • 疑难杂症
Powered by GitBook
On this page
  • 优化1:if的使用技巧之“给定初始值”
  • 优化2:if的使用技巧之“用"&&" 替换 if
  • 优化3:if的使用技巧之“三元运算符替换”
  • 优化4:简化“三元运算符”
  • 优化5:if的使用技巧之“去掉多此一举的if”
  • 优化6:“ else if ”能如何被改进呢?
  • 优化7::表驱动法替代“else if”
  • 优化8:循环语句几个要点
  • 优化9:使用更精悍短小的代码
  • 优化10:避免使用幻数(magic numbers)
  • 优化11:中间结果赋值给变量
  • 优化12:复杂的逻辑表达式做成布尔函数
  • 优化13:永远不要复制粘贴雷同的代码

Was this helpful?

  1. PHP 编码技巧

PHP代码优化

优化1:if的使用技巧之“给定初始值”

if (1 == $orderState) {
   $orderTitle = '已预定';
} else {
   $orderTitle = '已售完';
}

// 优化后
$orderTitle = '已售完';
if (1 == $orderState) {
 $orderTitle = '已预定';
}

优化2:if的使用技巧之“用"&&" 替换 if

if (strlen($newPwd) < 6) {
    $message = '密码长度不足!';
}

strlen($newPwd) < 6 && $message = '密码长度不足!';

优化3:if的使用技巧之“三元运算符替换”

if (empty($_POST['action'])) {
    $action = 'default';
} else {
    $action = $_POST['action'];
}

//优化后
$action = empty($_POST['action']) ? 'default' : $_POST['action'];

优化4:简化“三元运算符”

$action = empty($_POST['action']) ? 'default' : $_POST['action'];
// 简写后
echo $action = $_POST['action'] ?:'default' ;
//必须保证action必须是存在的,否则Notice: Undefined index: a xxx

优化5:if的使用技巧之“去掉多此一举的if”

function isLeapYear($year) {
    if (($year % 4 == 0 && 100 !=0) || ($year % 400 == 0)) {
        return true;
    } else {
        return false;
    }
}
//优化后
function isLeapYear($year) {
    return ($year % 4 == 0 && 100 !=0) || ($year % 400 == 0);
}

比如写js的时候

 $('#selStatus').bind('change',function(){
     $(this).val() == 'disabled' ? $('.reason').removeClass('hidden') : $('.reason').addClass('hidden');
 });

优化6:“ else if ”能如何被改进呢?

if ('玄幻' == $sortname) {
    $sort = 1;
} else if ('武侠' == $sortname) {
    $sort = 2;
} else if ('言情' == $sortname) {
    $sort = 3;
} else if ('其他' == $sortname) {
    $sort = 10;
}
//优化后
switch ($sortname) {
    case '玄幻':
        $sort = 1;
        break;
    case '武侠':
        $sort = 2;
        break;
    case '言情':
        $sort = 3;
        break;
    case '其他':
        $sort = 10;
        break;
}

优化7::表驱动法替代“else if”

$sortTable = array(
    '玄幻' => 1,
    '武侠' => 2,
    '言情' => 3,
    '其他' => 10,
);
$sortId = $sortTable[$sortname];

优化8:循环语句几个要点

  • 用while(true) 表示无限循环,别用for

  • 特定情况下[发邮件、采集网页],要加延时sleep

  • 循环体内尽可能不用函数或更耗资源的调用

  • foreach代替while和for循环(PHP)

  • 避免空循环

  • 只做一件事,尽可能短,控制在50行以内

  • 循环嵌套限制在3层以内

优化9:使用更精悍短小的代码

  • 函数的最佳最大长度是50-150行代码

  • 函数参数不超过7个

  • 短小函数更容易理解也方便修改

  • 只做一件事情的函数更易于复用

  • 短小的函数测试更方便

优化10:避免使用幻数(magic numbers)

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

//优化后
define('APP_CHARSET', 'UTF-8');
<meta http-equiv="Content-Type" content="text/html;charset={APP_CHARSET}" />

将一些比较难理解的东西,定义的常量(类中),这样代码可读性高

优化11:中间结果赋值给变量

$str = 'this_is_a_test';
$humpstr = implode('', array_map('ucfirst', explode('_', $str)));

// 优化后
$str = $str = 'this_is_a_test';
$words   = explode('_', $str);
$uWords  = array_map('ucfirst', $words);
$humpstr = implode('', $uWords);

优化12:复杂的逻辑表达式做成布尔函数

if (!$hasone && $ddisfirst = 1 && $litpic == '' && empty($litpicname)) {
    $litpcname = GetImageMapDD($iurl, $cfg_ddimg_width);;
}

// 优化后
$emptyPic = ($litpic == '' && empty($litpicname));
$validFirstPic = (!$hasone && $ddisfirst);
if ($validFirstPic && $emptyPic) {
    $litpcname = GetImageMapDD($iurl, $cfg_ddimg_width);;
}

优化13:永远不要复制粘贴雷同的代码

  • 相同的代码放一起让以后修改更轻松

  • 可以让全局的统计和过滤器等实现方便

  • 可复用的带参函数是解决雷同代码的好办法

PreviousPHP语法糖NextPHP重点新特性

Last updated 5 years ago

Was this helpful?

幻数浅析(Magic Number)