Zend OPcache 和 PHP 标准

今天将 PHP 特性剩余的一些小节看完了(Zend OPcache 和 Built-in Server),然后把第三章 PHP 标准(PSR-1,2,3,4)也看了下。这书比我以前看到的基础详细,现在终于知道一些东西的作用了。

Zend OPcache

php 是一种解释型语言,我现在才知道当我们访问 php 后端时,我们的代码会通过 Zend Opcodes 转化成机器语言(二进制代码),然后执行。Java 就是已经编译好了放上去,而 PHP 因为编译非常快,所以不用放二进制包放上去,用 Zend 引擎实时编译即可。但是在一些要高性能需求的环境下就要使用预先编译好的二进制包了。所以,在 PHP 5.5 之后就内置了自动缓存的 OPcache,使用了这个后在开发者模式下,你每次更新 php 代码,他都会自动编译成二进制代码并缓存起来,这时候我们去访问的时候就是直接访问编译好的包了。

具体的配置的话,实在 php.ini 下

1
2
3
4
5
6
opcache.validate_timestamps = 1 // "0" 生产环境下
opcache.revalidate_freq = 0
opcache.memory_consumption = 64
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 4000
opcache.fast_shutdown = 1

Built-in HTTP server

这个还是比较好理解的,php 为我们提供了一个内置的 web 服务器,这样我们不用安装nginx或者apache也能开启web应用。
php -S localhost:4000
只要在工程目录下使用这个命令就能在本地的4000端口开启 web 服务了。
但是这个只能在开发的时候用,因为这个 web 服务是单线程的同时只能接收一个请求,而且是会一个个处理任务的,所以线上用这个用户体验会很差,但开发的时候用这个真的很方便。

Standard

这章介绍了 因为一开始大家都用着自己的代码风格导致很难合作和互相借鉴,所以在一次开会的时候大家就决定成立 PHP-FIG 这个组织不是要强制我们的代码风格,而是建议我们的代码应该写成怎样。
书上写了 PSR-1,PSR-2,PSR-3,PSR-4 的具体建议。PSR-0 和 PSR-4都是自动加载标准,PSR-0目前已经废弃掉了用 4 取代了。

PSR-1:基础编码规范

  • PHP tags:一定只能用 <?php ?> 或 <?= ?>
  • Encoding:一定只能用 UTF-8 without BOM
  • Objective:只定义类、函数、常量等声明,或其他会产生副作用的操作
  • Autoloading:namespace 和 class 一定要支持 PSR-4
  • Class names:类命名需要使用 CamelCase
  • Constant names:常量命名使用全大写加上下划线分割,如 DATE_APPROVED
  • Method names:方法名使用 camelCase 规则,第一个字母小写。

PSR-2:编码风格规范(较严格)

  • 首先是要满足 PSR-1 的
  • Indentation:使用 4 个空格来缩进
  • Files and lines:
  • 使用 Unix linefeed (LF)
  • 文件最后一行留空
  • 而且最后不要有 ?> (防止在结束后产生非预期的错误输出)
  • 每一行最好不要超过80个字符,实在不行也不能超过120个字符
  • 行尾不能有多余的空格
  • Keywords:所有 PHP 关键字要小写,如 true、false
  • Namespaces:namespace 的后面留一行空
  • Classes:Class 定义之后的 { 要另起一行,但 extend implement 这些要在同一行。
  • Methods:Method 定义之后的 { 也是要另起一行的,而且包围方法里的参数的那个(后不能有空格,)前不能有空格
  • Visibility:类的属性和方法 必须 添加访问修饰符(private、protected 以及 public),abstract 以及 final 必须 声明在访问修饰符之前,而 static 必须 声明在访问修饰符之后
  • Control Structures:控制结构的开始花括号 { 必须写在声明的同一行,而结束花括号 } 必须写在主体后自成一行。

PSR-3:日志接口规范

  • 这个就是我们的日志接口该怎么写,但是作者说,推荐我们直接用第三方包了monolog/monolog。

PSR-4:自动加载规范

  • 我也感受到了写include和require的痛苦,在没有标准化之前大家都是写自己的__autoload(),而PSR-4的自动加载策略是根据 PHP Namespace 来的,作者说会在Composer那章详细讲解这个。

官方的 PSR 文档

现在除了1 2 3 4 好像还出来其他的标准,大家可以去看下。

最后

感觉我看书的进度太慢了点😂,后面还有好多章的,但又要仔细的看下,要不然以后还是得重新回头来看这些基础。专注一点应该能加快点。