此篇记录一下阅读《Modern PHP》后的一些内容。

第1章 新时代的PHP

  1. 命名空间、性状、闭包和内置的操作码缓存
  2. 依赖管理程序Composer
  3. 多个PHP引擎:Zend Engine 和 HHVM(Facebook开发的HipHop Virtual Machine)
  4. Hack语言是建立在PHP之上的编程语言,引入了静态类型、新的数据结构和额外的接口,同时还向后兼容现有的动态类型PHP代码
  5. HHVM是PHP和Hack的解释器,使用即时(Just In Time,JIT)编译器提升应用的性能,并减少内存用量
  6. Zend Engine核心团队开发的PHP7性能与HHVM相当

第2章 特性

  1. 命名空间

<?php
namespace Company;
  1. 别名

<?php
use Company\Component\Response as Res;
use func Namespace\functionName;
use constant Namespace\CONST_NAME;

functionName();
echo CONST_NAME;
  1. 性状(Trait)

<?php
trait MyTrait {

}

<?php
class MyClass
{
    use MyTrait;
}
  1. 生成器(generator)

<?php
function myGenerator() {
    yield 'value1';
    yield 'value2';
    yield 'value3';
}
  1. 闭包

<?php
$closure = function ($name) {
    return sprintf('Hello %s', $name);
};
  1. Zend OPcache
  2. 内置的HTTP服务器

php -S localhost:4000
php -S localhost:8000 -c app/config/php.ini

判断使用的是否为内置的服务器


<?php
if (php_sapi_name() === 'cli-server') {
    // PHP内置的Web服务器
} else {
    // 其他Web服务器
}

第3章 标准

  1. PHP社区已从中心化的框架模型进化为分布式生态系统了
  2. PHP-FIG制定了推荐规范
  3. 自动加载
    在PHP标准出现之前,PHP组件和框架使用魔术方法__autoload()或最新的spl_autoload_register()方法实现各自持有的自动加载器。如今,使用共同的一个自动加载器标准,就能混合搭配多个PHP组件。
  4. PSR
  • PSR是PHP Standards Recommendation(PHP推荐标准)的简称
  • PHP-FIG发布了PSR-0 ~ PSR-4共5个推荐规范,其中PSR-0已废弃
标准 规范 备注
PSR-0 自动加载 已经废弃
PSR-1 基本的代码风格
PSR-2 严格的代码风格
PSR-3 日志记录器接口
PSR-4 自动加载
PSR-5 PHPDoc标准 草案阶段
PSR-6 Cache 草案阶段
PSR-7 HTTP消息接口

第4章 组件

  1. Packagist是查找组件的地方,Composer是安装PHP组件的工具
  2. Composer是PHP组件的依赖管理器

composer require vendor/package
  1. composer.json文件和composer.lock文件

第5章 良好实践

  1. 不要相信任何来自不受自己直接控制的数据源中的数据
  2. 哈希算法有很多种(例如MD5、SHA1、bcrypt和scrypt)
  3. 目前,经同行审查,最安全的哈希算法是bcrypt。与MD5和SHA1不同,bcrypt是故意设计的很慢。bcrypt算法会自动加盐,防止潜在的彩虹表攻击。
  4. bcrypt算法永不过时,如果计算机的运算速度变快了,我们只需提高工作因子的值
  5. 设置默认时区

<?php
date_default_timezone_set('Asia/Shanghai');
  1. 数据库
  • PDO扩展
  • 数据库连接和DSN
  • 事务:PDO扩展还支持事务

第6章 主机

  1. 共享服务器、虚拟私有服务器、专用服务器和平台即服务

第7章 配置

  1. PHP-FPM(PHP FastCGI Process Manager)
  2. Nginx虚拟主机的设置在server{}块中
  3. 大多数情况下,HTTP流量从80端口进入,HTTPS流量从443端口进入

第8章 调优

  1. memory_get_peak_usage()
  2. print_r(realpath_cache_size())

第9章 部署

  1. 自动部署
  2. 让部署的结果可预知
  3. 让部署可逆

第10章 测试

  1. 单元测试
  2. 功能测试
  3. 测试驱动开发(Test-Driven Development,TDD)
  4. 行为驱动开发(Behavior-Driven Development,BDD)
  5. 单元测试框架:PHPUnit和PHPSpec
  6. 使用Travis CI持续测试

第11章 分析

  1. Xdebug
  2. XHProf + XHGUI
  3. Blackfire分析器

第12章 HHVM和Hack

  1. 使用Supervisord监控HHVM
  2. HHVM通过FastCGI协议与Web服务器(例如nginx)通信
  3. HHVM也可以运行Hack语言
  4. Hack语言添加了PHP中没有的新数据结构和接口
  5. 若想把代码从PHP转到Hack,把<?php改成<?hh即可

第13章 社区

  1. 本地PHP用户组(PHP User Group,PUG)

附录A 安装PHP

  1. wget、phploc、phpmd和php-code-sniffer

附录B 本地开发环境

  1. VirtualBox
  2. Vagrant