如何学习 PHP 源码 - 从编译开始

2017-01-08
阅读 3 分钟
6k
PHP Mailing Lists 上这两天有个好玩儿的问题:Introduction to the PHP source code,大概就是有人想知道如何学习 PHP 源码,可是这种事情不是应该自己去发掘的吗?

一个神奇的操作符即将加入PHP

2016-12-22
阅读 1 分钟
2.5k
它会引起我的注意的还有一个原因是我之前写过这样一篇文章:两行代码给 PHP7 添加一个“非空合并”语法糖,里面讲的是添加一个 ??: 操作符的方法, 而现在要讲的这个,已经被接受的 rfc 里添加的操作符是: ??=。

一个关于 PHP 的 new 的小问题的探究

2016-11-21
阅读 2 分钟
2.4k
这段代码是可以正确运行的,并且 $a 和 $b 是两个不同的空对象。即使在 new $a 之前给 $a 添加属性并赋值,$b 也始终是一个的空对象。

PHP 7.1 新特性一览

2016-09-15
阅读 5 分钟
7.5k
PHP 7.1 release版本发布在即,本文整理一下 7.1 中的一些新特性以供了解。所有内容均选自官方 RFC 文档。 可空类型 可空类型主要用于参数类型声明和函数返回值声明。 主要的两种形式如下: {代码...} 从例子很容易理解,所指的就是通过 ? 的形式表明函数参数或者返回值的类型要么为指定类型,要么为 null。 此方法也可...

PHP 错误与异常的日志记录

2016-07-31
阅读 2 分钟
7.3k
提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志、error 日志以及 PHP 的 error 日志。虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用。再者运行的应用程序中的配...

PHP 共享内存使用与信号控制

2016-05-01
阅读 3 分钟
8.7k
共享内存的使用主要是为了能够在同一台机器不同的进程中共享一些数据,比如在多个 php-fpm 进程中共享当前进程的使用情况。这种通信也称为进程间通信(Inter-Process Communication),简称 IPC。

PHP 代码规范简洁之道

2016-02-29
阅读 2 分钟
4.1k
1. 统一的编码规范 编码规范往简单说其实就是三个方面: 换行 空格 变量命名 放在 PHP 里面,还有一些附加的地方,比如关键字大小写,语法糖的使用(array() 与 [] 等)的问题。之前整理过 PSR 的标准,也找过 php-cs-fixer 这样的工具。这些都是规范代码的重要手段。有统一的标准,配合上工具的检查,形成统一的编码约...

[译]变量在 PHP7 内部的实现(二)

2015-12-20
阅读 9 分钟
5.5k
本文第一部分和第二均翻译自Nikita Popov(nikic,PHP 官方开发组成员,柏林科技大学的学生) 的博客。为了更符合汉语的阅读习惯,文中并不会逐字逐句的翻译。

php-cs-fixer - PHP 编码格式化工具

2015-12-17
阅读 7 分钟
14.6k
php-cs-fixer 是个代码格式化工具,格式化的标准是 PSR-1、PSR-2 以及一些 symfony 的标准。这个工具也和 symfony、twig 等优秀的 PHP 库出自同门。

[译]变量在 PHP7 内部的实现(一)

2015-12-10
阅读 13 分钟
6.4k
本文第一部分和第二均翻译自Nikita Popov(nikic,PHP 官方开发组成员,柏林科技大学的学生) 的博客。为了更符合汉语的阅读习惯,文中并不会逐字逐句的翻译。

PHP7 的抽象语法树(AST)带来的变化

2015-11-20
阅读 4 分钟
9.3k
本文大部分内容参照 AST 的 RFC 文档而成:[链接],为了易于理解从源文档中节选部分进行介绍。 本文并不会告诉你抽象语法树是什么,这需要你自己去了解,这里只是描述 AST 给 PHP 带来的一些变化。 新的执行过程 PHP7 的内核中有一个重要的变化是加入了 AST。在 PHP5中,从 php 脚本到 opcodes 的执行的过程是: Lexing...

两行代码给 PHP7 添加一个“非空合并”语法糖

2015-11-08
阅读 2 分钟
4k
我们知道从 PHP 5.3 起三元运算符 ? : 有一个写法简洁写法是这样的: {代码...} 这实际上相当于: {代码...} 在 PHP5 中,语法分析是这样写的: {代码...} 在 PHP7 中,由于 AST(抽象语法树)的引入,语法分析有些简化: {代码...} PHP7 中语法分析之后都是写到 AST 的节点上。从上面可以看出,简化的 ?: 和完整的三元...

max/min 函数(PHP)的一个小 BUG

2015-11-07
阅读 6 分钟
4.1k
先直接来看一段展示: {代码...} 上面的演示中,ceil 函数返回的是 -0.0,max 在将 ceil 函数调用的结果作为参数传入的时候,返回的也是一个 -0.0。 如果给 ceil 的结果赋值给变量,还是能得到 -0.0 的结果: {代码...} 下面就来一一分析是哪些原因导致了这些结果的产生。 ceil 会返回 -0.0 首先我们来看一下为什么 ceil...

如何编写一个独立的 PHP 扩展(译)

2015-11-04
阅读 3 分钟
3.7k
本文翻译自 PHP 源码中的 README.SELF-CONTAINED-EXTENSIONS。文中标记了 注 的内容均为自己添加。内容有点老,也挺啰嗦,没讲什么深入的内容,但是可以作为入门学习参考。

getimagesize 函数不是完全可靠的

2015-10-26
阅读 3 分钟
16.4k
如果指定的文件如果不是有效的图像,会返回 false,返回数据中也有表示文档类型的字段。如果不用来获取文件的大小而是使用它来判断上传文件是否是图片文件,看起来似乎是个很不错的方案,当然这需要屏蔽掉可能产生的警告,比如代码这样写:

Laravel 模板引擎(Blade)原理简析

2015-10-26
阅读 4 分钟
18.8k
上次提到过,模板引擎一般是要做三件事情: 变量值的输出(echo) 条件判断和循环(if ... else、for、foreach、while) 引入或继承其他文件 现在就来看看 Laravel 的模板引擎是如何来处理这三件事情的。我是在 Laravel 5.1 的实现上来写这篇文章的。 1. 视图解析流程 Laravel 的 View 部分是内置了两套输出系统:直接输...

PHP 7 的几个新特性

2015-10-18
阅读 2 分钟
7k
1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: {代码...} 它相当于: {代码...} 我们知道三元运算符是可以这样用的: {代码...} 但是这是建立在 $a 已经定义了的前提上。新增的 ?? 运算符可以简化判断。 2. 函数返回值类型声明 官方文档提供的例子(注意 ... 的边长参数语法在 PHP 5...

现在写 PHP,你应该知道这些

2015-10-11
阅读 4 分钟
10.5k
The idea behind the group is for project representatives to talk about the commonalities between our projects and find ways we can work together.

说说 PHP 的 die 和 exit

2015-09-25
阅读 3 分钟
6.3k
今天有小伙伴说 exit 和 die 有一点差别。我说 die 不就是 exit 的别名吗?为了证明我的观点,翻了翻 PHP 的源码,在 zend_language_scanner.l 中,很容易就能发现这关键字是同一个 token: