Modern PHP简略笔记

0 前言

Modern PHP(中文版)豆瓣评分挺高的,所以找来看看,做个简略笔记,有些我已经熟悉的就不做记录了。

1 语言特性

1 新时代的PHP

2 特性

  • 命名空间
    主要了解一下自动加载原理
    __autoload(), spl_autoload_register(),include()
  • 使用接口
    用接口来协调不同对象之间的关系
  • 性状
    trait 代码复用,解决php没有多继承
  • 生成器
    关键字 yield
    不用实现ilterator接口就能遍历,并且还可以节省内存。
    比较:


$begin = memory_get_usage();
function makeRange($length)
{
    for ($i = 0; $i < $length; $i++)
    {
        yield $i;
    }
}
$customRange = makeRange(100000);
foreach ($customRange as $i) {
    echo $i, PHP_EOL;
}
echo 'memory usage:' , memory_get_usage() - $begin, PHP_EOL;

结果:memory usage:416(bytes)

这内存省的太多了。

  • 闭包
    我自己也是经常用,主要是用在array_map() ,call_user_function_array()等等
  • Zend OPcache
    很多其它扩展APC、XCache等等,但Zend OPcache已集成到内核,编译时打开扩展就行了

2 良好实践

3 标准

PSR-1: 基本的代码风格
PSR-2:严格的代码风格
PSR-3:日志记录器接口
PSR-4:自动加载

4 组件

用Composer安装组件,基本大家都会啦。
可以学习一下怎么写组件,到Packagist注册,提交代码。
Packagist

5 良好实践

  • 过滤、验证和转义
htmlentities() //对输入的html转义,用的时候要指定参数
htmlentities($html, ENT_QUOTES, 'utf-8') //第二个参数指定对单引号和双引号转义,第三个 参数指定编码

filter_var()//指定过滤字符

bcrypt 最安全的哈西算法,哈希加盐,防止彩虹表攻击。

PDO 预处理语句,绑定参数
    • file://流封装协议: 使用file_get_contents()、fopen()、fwrite()和fclose()函数读写文件系统;
    • php://流封装协议:
      1. php://stdin
      2. php://stdout
      3. php://memory
      4. php://temp
        file_get_contents还能POST,666,这个我真不知道哈哈
 [
       'method' => 'POST',
       'header' => "Content-Type: application/json;charset=utf-8;\r\n" .
                    "Content_Length" . mb_strlen($requestBody),
       'content' => $requestBody
   ]
]);
$response = file_get_contents('https://my-api.com/users', false,  $context);
  • 异常
  • 错误
    作者推荐了一个组件:Monolog

部署、测试和调优

6 主机

主机方案,主要讲根据项目大小选用服务器的,略过

7 配置

  • 配置php-fpm(进程数pm.max_children = 51等等)
  • 配置nginx

8 调优

  • 内存
    1.一共能分配给PHP内存:一般512M就够咯
    2.单个PHP进程平均消耗多少内存:top可以查看,还可以用memory_get_peak_usage()函数获取内存峰值。

    1. 能负担得起多少个PHP-FPM进程:假设平均每个PHP进程消耗15M,给PHP分配512M,所以可以负担512/15=34个进程
  • Zend OPcache

opcache.memory_consumption = 64 //为操作码缓存分配的内存量(M)
opcache.interned_strings_buffer = 16 //用来储存interned string的内存量
opcache.max_accelerated_files = 4000//操作码缓存中最多能存储多少个PHP脚本
opcache.validate_timestamps = 1//这个设置的值为1时,经过一段时间后PHP会检查PHP脚本的内容是否有变化,0不检查。
opcache.revalidate_freq = 0 //设置多久检查一次PHP脚本的内容是否有变化,单位是秒
opcache.fast_shutdown = 1//这么设置能让操作码使用更快的停机步骤,把对象析构和内存释放交给你Zend Engine的内存管理器完成
  • 文件上传
    php.ini
file_uploads = 1
upload_max_filesize = 10M
max_file_uploads = 3
  • 最长执行时间
    php.ini
max_execution_time = 5
  • 处理会话
session.save_handler = 'redis'
session.save_path = '127.0.0.1:6379'
  • 缓冲输出
output_buffering = 4096
implicit_flush = false

9 部署

  • git 熟悉,略过
  • Capistrano自动部署 ,使部署可逆

10 测试

  • PHPUnit

11 分析

  • Xdebug

12 HHVM和Hack

你可能感兴趣的:(Modern PHP简略笔记)