分类 PHP 下的文章

PHP 中几种用于区分环境的方法

在项目开发过程中,我们一般至少会有三套环境:本地开发环境,测试环境、线上生产环境。而不同的环境一般它的配置文件内容是不一样的,比如环境不一样时数据库地址不一样。为了能在每次发布代码时不至于屡次改动代码来适配不同的环境,我们可以为每一套环境对应到各自的配置文件,这时就需要能有一种方法能识别当前代码所运行的环境来自动加载对应的配置文件。这样的自动识别环境的方法常用的有三种。

Yii2 实现 RESTful 原理

Yii 从版本 Yii2 开始提供了一整套用来简化实现 RESTful 风格的 Web Service 服务的 API,这让我们借助于 Yii2 框架能非常容易的去实现一个 RESTful 风格的 API 。而要能够实现这个功能,就需要做到请求接收,解析请求提取出 verb 和参数,对请求进行路由,授权验证,访问限制,访问和操作资源,对返回结果格式化等功能的支持。

php5.3 升级到 php5.6

项目中因要用到 Yii2 框架,而 Yii2 框架中的一些特性是在 php5.3 之后(php5.4.0+)才开始支持的。故需要将 php 做一次升级。而之前的 php 项目(比较重)为了统一版本标准也打算一并升级到 PHP5.6,5.6 相对于 PHP5.3 而言有巨大的改进。为了能顺利完成这次版本升级,需要解决对升级过程过程可能遇到的兼容问题。

谈谈 PHP 代码规范

我向往这样一个 php 世界,里面没有代码规范之争。你我都一样,都遵循着一套如宪法般的规范,就像 golang 世界一样。统一的命名法则,统一的缩进方式。而现实世界却让人落差很大,每个不同的团队就像不同的国家,都颁布有自己的法律。穿梭于 N 个团队之间你就得去适应 N 套规范。

在 php 中使用 strace、gdb、tcpdump 调试工具

在 php 中我们最常使用调试方式是输出打印方式,比如通过 echo、var_dump 输出信息到终端或者通过 fwrite、file_put_contents 将信息写入到文件中。这种普通方式能帮我们解决绝大部分调试问题。但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用 cpu 过高,php 内核或者扩展错误等场景,这时如果借助 strace、gdb、tcpdump 这样的工具就能很好的去帮助我们定位问题。

为什么 echo 快于 var_dump?

先简单介绍下这它们。

  • echo 不是一个函数(是一个语言结构),所以我们可以直接这样写echo $var,而不使用函数执行符“()”。
  • var_dump 是一个函数。

为什么 (int) 快于 intval?

(int)和 intval 都是对变量进行强制类型转换,而(int)的速度会明显快于 intval,我们就此细究下其中原因。

为什么 php 编译速度很快?

php 开发效率高一个原因是开发完的代码直接上线运行就好了,不用在本地先像 java 那样先编译好再发布。而其实内部 php 也是有一个编译过程的(PHP 是一种编译型脚本语言)。Zend 引擎在读取 php 源码后大致需要执行4个流程:

1、词法分析;
2、语法分析;
3、编译器编译成中间码 opcode;
4、解释器(Zend 虚拟机)顺序一条一条地执行 Opcode。

但其中它的编译过程的速度是非常快的,这是因为在编译过程中 php 不做任何语义优化,不像 java、c++ 那样的语言编译器做了大量的优化工作,而优化工作是非常耗时的。这也就是编译速度快于它们的原因。当然因为 php 编译过程没做任何语义优化,这就把这个“优化工作”交给了程序员,所以我们在写 php 代码时要比 java、c++ 等多留意下优化问题。