• 自上而下,逐步揭开 PHP 解析大整数的面纱

    Posted by : lon.y@qq.com on 2017年9月20日

    浮点数精度丢失是一个长久的问题,PHP中精度丢失并不是PHP的bug,是计算机表示范围导致的问题。精度,这个问题的原因看起来不太重要,虽然学这个对于实际上的业务开发也没什么用,不会让你的开发能力“duang”地一下上去几个level,但是了解了PHP对于大整数的处理,也是自己知识框架的一个小小积累。 遇到的问题 最近遇到一个PHP大整数的问题,问题代码是这样的 $shopId = 17978812896666957068; var_dump($shopId

    阅读全文...

  • PHP 的变量实现

    Posted by : lon.y@qq.com on 2017年7月4日

    《给PHP开发者的PHP源码(1):源码结构》 《给PHP开发者的PHP源码(2):理解 PHP 内部函数的定义》 在”给PHP开发者的PHP源码”系列的第三篇文章,我们打算扩展上一篇文章来帮助理解PHP内部是怎么工作的。在第一篇文章,我们介绍了如何查看PHP的源码,它的代码结构是怎样的以及一些介绍给PHP开发者的C指针基础。第二篇文章介绍了函数。这一次,我们打算深入PHP最有用的结构之一:变量。 进入ZVAL 在PHP的核心代码中,变量被称为ZVAL。这

    阅读全文...

  • 5 个 Laravel Eloquent 小技巧

    Posted by : lon.y@qq.com on 2017年7月4日

    在大型的项目中使用 Laravel Eloquent ORM,某些工作可能会变得重复和繁琐,所以本文为大家总结了 5 个很少人知道的小技巧,在开发过程中帮我节省了很多时间。下面就让我们开始吧。 1. 快速生成 Model & Migration 这并不是一个很多人知道的小技巧,在 Laravel 文档中也没有提到。下面我们以一个博客为简单的例子,为文章生成 Model 和 Migration。 $ php artisan make:migratio

    阅读全文...

  • 理解数组在PHP内部的实现

    Posted by : lon.y@qq.com on 2017年7月4日

    欢迎来到”给PHP开发者的PHP源码”系列的第四部分,这一部分我们会谈论PHP数组在内部是如何表示和在代码库里使用的。为了防止你错过了之前的文章,以下是链接:第一部分:给PHP开发者的PHP源码-源码结构第二部分:理解PHP内部函数的定义 第三部分:PHP的变量实现 所有的东西都是哈希表 基本上,PHP里面的所有东西都是哈希表。不仅仅是在下面的PHP数组实现中,它们还用来存储对象属性,方法,函数,变量还有几乎所有东西。 因为哈希表对PHP来说太基础了,因此

    阅读全文...

  • 给PHP开发者的PHP源码(1):源码结构

    Posted by : lon.y@qq.com on 2017年7月4日

    (补注:英文原文写于 2012 年 3 月) 作为一个开发者,我发现在我的日常工作中越来越多地查看 PHP 的源码。在为了弄清楚奇怪的边界问题和为什么某些问题应该发生的却没有发生而去理解背后究竟发生了什么事情的时候非常有用。在文档缺失、不完整或者错误的情况下也很有用。因此,我已经决定通过一系列的文章来分享我学到的知识,给予PHP开发者们足够的知识去真正阅读PHP的C语言源码。你并不需要有C语言的基础(我们会总结一些基础),但如果有的话会更有帮助。 这是这个

    阅读全文...

  • PHP源码阅读:array_pop 和 array_shift 函数

    Posted by : lon.y@qq.com on 2017年7月4日

    上篇文章介绍了PHP添加元素到数组的函数,那么当然有从数组中删除元素。array_pop和array_shift只从数组的头或尾删除一个元素。经过阅读源码,发现这两个函数的实现都是调用了同一个函数–_phpi_pop来实现从数组中删除一个数组元素的功能。因此解读时将这两个函数一并讲了。 我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。 函数语法 array_po

    阅读全文...

  • PHP源码阅读:empty 和 isset 函数

    Posted by : lon.y@qq.com on 2017年7月4日

    近日被问到 PHP 中 empty 和 isset 函数时怎么判断变量的,刚开始我是一脸懵逼的,因为我自己也只是一知半解,为了弄懂其真正的原理,赶紧翻开源码研究研究。经过分析可发现两个函数调用的都是同一个函数,因此本文将对两个函数一起分析。 函数使用格式 empty bool empty ( mixed $var ) 判断变量是否为空。 isset bool isset ( mixed $var [ , mixed $... ] ) 判断变量是否被设置且不

    阅读全文...

  • PHP源码阅读:array_push 和 array_unshift 函数

    Posted by : lon.y@qq.com on 2017年7月4日

    在PHP中,在数组中添加元素也是一种很常用的操作,分别有在数组尾部和头部添加元素,看看PHP内部是如何实现数组插入的操作。 array_push int array_push ( array &$array , mixed $value1 [ , mixed $... ] ) array_push函数将array参数看做一个栈,将传递进来的变量压倒array的尾部。array的长度随着被压进去的变量个数增加。下面的代码有意义的效果: $array[

    阅读全文...

  • PHP源码阅读:trim、rtrim、ltrim 函数

    Posted by : lon.y@qq.com on 2017年7月4日

    trim 系列函数是用于去除字符串中首尾的空格或其他字符。ltrim 函数只去除掉字符串首部的字符,rtrim函数只去除字符串尾部的字符。 trim string trim ( string $str [, string $character_mask = " tnrx0B" ] ) 参数说明 character_mask 默认是” tnrx0B”等空白字符。 使用..可以指定一段范围的字符。此处要注意,”..”左右两边是一对合法的范围值,如果传递的是非法

    阅读全文...

  • PHP源码阅读:strpos、strstr、stripos、stristr函数

    Posted by : lon.y@qq.com on 2017年7月4日

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。 strpos mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] ) 如果offset指定了,查找会从offset的位置开始。offset不能为负数。 返回needle第一次出现在haystack的位置。如果在haystack中找

    阅读全文...