
php底层
gb4215287
这个作者很懒,什么都没留下…
展开
-
PHP魔法函数性能分析
前言曾经记得鸟哥Laruence提过不建议使用"魔术方法",自此之后一旦涉及使用魔术方法的地方,我都会下意识的想一下,这样写真的好吗?由于这一到两年来一直忙于工作和学习新的知识,所以在这道坎儿上一直没有做深入的探索一直恍恍惚惚过去了,今年是我进行深入学习的一年,因此现在必须对这个问题做个了结了。我们先来看看鸟哥Laruence博客曾经提到的:当我把PPT分享给公司的同事的时候, 会有人质疑, 魔术方法都不让用?优化的建议, 是建议, 是防止大家滥用, 肆无忌惮的用. 如果你能在写代码的时候, 能意转载 2020-09-27 15:45:14 · 186 阅读 · 0 评论 -
PHP类实例教程(七):析构函数与PHP的垃圾回收
析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。GC (Garbage Collector)在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。这是PHP的GC (Garbage Collector)垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。__destru转载 2017-10-28 14:01:59 · 278 阅读 · 0 评论 -
PHP新的垃圾回收机制:Zend GC详解
概述 在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不释放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况(Bug:http://bugs.p转载 2017-10-28 14:00:49 · 229 阅读 · 0 评论 -
PHP内核探索之变量(1)Zval(自己看过不错儿)
作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字、数组、字符串、对象还是其他,因而可以说变量是构成语言的不可或缺的基础。本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括如下几个方面的内容:Zval的基本结构查看zval的方法:debug_zval_dump和xdebugZval的原理,COW等由于写作仓促,难免会有错误,欢迎指出。一、Zval的基本结转载 2017-10-04 19:10:09 · 361 阅读 · 0 评论 -
PHP垃圾回收深入理解
PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection)。现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼容。PH转载 2017-09-29 16:50:09 · 219 阅读 · 0 评论 -
[置顶] PHP内核探索之变量(7)- 不平凡的字符串
切,一个字符串有什么好研究的。别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看:(1) 在C语言中,strlen计算字符串的时间复杂度是?PHP中呢?(2) 在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何?同样是字符串,为什么c语言与C++/PHP/Java的均不相同?数据结构决定算法,这句话一点不假。那么我转载 2017-09-29 15:59:57 · 281 阅读 · 0 评论 -
PHP内核探索之变量(4)- 数组操作
上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪。本文主要内容:PHP中提供的数组操作函数数组操作函数的实现结语参考文献一、PHP中提供的数组操作函数可以说,数组是PHP中使用最广泛的数据结构之一,正因如此,PHP为开发者提供转载 2017-09-29 15:46:24 · 287 阅读 · 0 评论 -
php7-internal 7.7 zval的操作
扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己去管理这些值将是非常繁琐的一件事,所以我们应该使用PHP提供的这些宏来操作用到的zval。7.7.1 新生成各类型zvalPHP7将变量的引用计数转移到了具体的value上,所以zval更多的是作为统一的传输格式,转载 2017-09-29 15:37:21 · 2642 阅读 · 0 评论 -
php数组源码分析
PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一个符号表转载 2017-09-29 15:30:34 · 926 阅读 · 0 评论 -
PHP源码分析-数组
2.2 数组数组是PHP中非常强大、灵活的一种数据类型,它的底层实现为散列表(HashTable,也称作:哈希表),除了我们熟悉的PHP用户空间的Array类型之外,内核中也随处用到散列表,比如函数、类、常量、已include文件的索引表、全局符号表等都用的HashTable存储。散列表是根据关键码值(Key value)而直接进行访问的数据结构,它的key - value之间存在一个转载 2017-09-29 15:28:49 · 342 阅读 · 0 评论 -
探究php底层运行机制
本文转载自:http://www.myext.cn/Article/921.html概要简介 先看看下面这个过程:我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的; php通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口); PHP总共有三个模块:内核、Zend引擎、以及扩转载 2017-09-02 14:44:36 · 532 阅读 · 0 评论 -
PHP的运行机制与原理(底层)
php看着很简单,但是要深入php的运行机制与原理也不是件容易的事,我们除了会使用之外还要知道它底层的工作原理,这样才能灵活的运用,对php运行机制感兴趣的朋友一起学习吧说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核、Zend引擎、以及扩展层;PHP内核用来处理请求、文件流、错误处理等相关操作;Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟转载 2017-09-02 14:43:33 · 454 阅读 · 0 评论 -
PHP源码之数组的内部实现
哈希表基本上,PHP里面的所有东西都是哈希表。不仅仅是在下面的PHP数组实现中,它们还用来存储对象属性,方法,函数,变量还有几乎所有东西。因为哈希表对PHP来说太基础了,因此非常值得深入研究它是如何工作的。什么是哈希表记住,在C里面,数组是内存块,你可以通过下标访问这些内存块。因此,在C里面的数组只能使用整数且有序的键值(那就是说,你不能在键值0之后使用1332转载 2017-09-07 09:27:30 · 503 阅读 · 0 评论 -
王帅:深入PHP内核(二)——SAPI探究(精辟)
SAPI是Server Application Programming Interface(服务器应用编程接口)的缩写。PHP通过SAPI提供了一组接口,供应用和PHP内核之间进行数据交互。简单的讲,就像函数的输入和输出一样,我们通过Linux命令行执行一段PHP代码,本质是Linux的Shell通过PHP的SAPI传入一组参数,Zend引擎执行后,返回给shell,由shell显示出来的过程转载 2017-09-06 16:12:23 · 427 阅读 · 0 评论 -
PHP源码分析-PHP的生命周期
PHP的最多的两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。1、当我们在终端敲入php这个命令的时候,它使用的是CLI。它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。2、当使用Apache作为宿主时,当一个请求到来时,PHP会来支持完成这个请求。main/php.h中定义了转载 2017-09-06 16:17:54 · 290 阅读 · 0 评论 -
自己动手用C扩展PHP(三)
在上两章里讲述了扩展模块的基本用法,相信读者已经能够构建自己的扩展模块了,接下来,我们来看看几个重要的函数: 1、PHP_MINIT_FUNCTION(MyModule); 当模块被Zend Engine(ZE)加载后,例如Apache启动,加载了PHP模块,ZE会对每一个扩展模块调用此函数(如果有的话),可以在该函数里进行一些初始化操作。 2、PH转载 2017-09-06 16:16:01 · 313 阅读 · 0 评论 -
Apache启动过程(PHP_MINIT_FUNCTION的调用)
信件内容,to eng-all;Hi all:上次我做的讲座中,讲到,PHP模块的MINIT_FUNCTION在多进程的环境下,会被调用多次,也就是,每个apache的自进程都会去调用一次。今天早上的时候,学鹏经过实际验证发现事实不是这样。于是经过反复验证 ,终于得出如下结论:当Apache启动的时候,主进程会首先把所有模块load进来,然后又卸载掉 他们,这是第一遍,目的是为转载 2017-09-06 16:14:41 · 493 阅读 · 0 评论