此篇记录一下阅读《Modern PHP》后的一些内容。
第1章 新时代的PHP
- 命名空间、性状、闭包和内置的操作码缓存
- 依赖管理程序Composer
- 多个PHP引擎:Zend Engine 和 HHVM(Facebook开发的HipHop Virtual Machine)
- Hack语言是建立在PHP之上的编程语言,引入了静态类型、新的数据结构和额外的接口,同时还向后兼容现有的动态类型PHP代码
- HHVM是PHP和Hack的解释器,使用即时(Just In Time,JIT)编译器提升应用的性能,并减少内存用量
- Zend Engine核心团队开发的PHP7性能与HHVM相当
第2章 特性
- 命名空间
<?php
namespace Company;
- 别名
<?php
use Company\Component\Response as Res;
use func Namespace\functionName;
use constant Namespace\CONST_NAME;
functionName();
echo CONST_NAME;
- 性状(Trait)
<?php
trait MyTrait {
}
<?php
class MyClass
{
use MyTrait;
}
- 生成器(generator)
<?php
function myGenerator() {
yield 'value1';
yield 'value2';
yield 'value3';
}
- 闭包
<?php
$closure = function ($name) {
return sprintf('Hello %s', $name);
};
- Zend OPcache
- 内置的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章 标准
- PHP社区已从中心化的框架模型进化为分布式生态系统了
- PHP-FIG制定了推荐规范
- 自动加载
在PHP标准出现之前,PHP组件和框架使用魔术方法__autoload()或最新的spl_autoload_register()方法实现各自持有的自动加载器。如今,使用共同的一个自动加载器标准,就能混合搭配多个PHP组件。 - 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章 组件
- Packagist是查找组件的地方,Composer是安装PHP组件的工具
- Composer是PHP组件的依赖管理器
composer require vendor/package
- composer.json文件和composer.lock文件
第5章 良好实践
- 不要相信任何来自不受自己直接控制的数据源中的数据
- 哈希算法有很多种(例如MD5、SHA1、bcrypt和scrypt)
- 目前,经同行审查,最安全的哈希算法是bcrypt。与MD5和SHA1不同,bcrypt是故意设计的很慢。bcrypt算法会自动加盐,防止潜在的彩虹表攻击。
- bcrypt算法永不过时,如果计算机的运算速度变快了,我们只需提高工作因子的值
- 设置默认时区
<?php
date_default_timezone_set('Asia/Shanghai');
- 数据库
- PDO扩展
- 数据库连接和DSN
- 事务:PDO扩展还支持事务
第6章 主机
- 共享服务器、虚拟私有服务器、专用服务器和平台即服务
第7章 配置
- PHP-FPM(PHP FastCGI Process Manager)
- Nginx虚拟主机的设置在server{}块中
- 大多数情况下,HTTP流量从80端口进入,HTTPS流量从443端口进入
第8章 调优
- memory_get_peak_usage()
- print_r(realpath_cache_size())
第9章 部署
- 自动部署
- 让部署的结果可预知
- 让部署可逆
第10章 测试
- 单元测试
- 功能测试
- 测试驱动开发(Test-Driven Development,TDD)
- 行为驱动开发(Behavior-Driven Development,BDD)
- 单元测试框架:PHPUnit和PHPSpec
- 使用Travis CI持续测试
第11章 分析
- Xdebug
- XHProf + XHGUI
- Blackfire分析器
第12章 HHVM和Hack
- 使用Supervisord监控HHVM
- HHVM通过FastCGI协议与Web服务器(例如nginx)通信
- HHVM也可以运行Hack语言
- Hack语言添加了PHP中没有的新数据结构和接口
- 若想把代码从PHP转到Hack,把<?php改成<?hh即可
第13章 社区
- 本地PHP用户组(PHP User Group,PUG)
附录A 安装PHP
- wget、phploc、phpmd和php-code-sniffer
附录B 本地开发环境
- VirtualBox
- Vagrant