搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > PHP自学中心 > PHP底层你要学习哪些内容【回顾与总结】

PHP底层你要学习哪些内容【回顾与总结】

PHP自学中心 2020-06-12


文章来自:https://blog.csdn.net/ty_hf/article/details/73194886

点击加入:








  
    
    
  

视频教程分享

1 CodeIgniter3视频教程 
公众号里回复:CI3

2 Yii2视频教程
公众号里回复:yii2

3 laravel5博客实战视频教程
公众号里回复:laravel1221

4 ThinkPHP5商城实战视频教程
公众号里回复:TP1220

5 Laravel5.x底层实战兼核心源码解析
链接:http://www.mano100.cn/thread-344-1-1.html

6 由浅入深析ThinkPHP5ThinkPHP6底层源码
链接:http://www.mano100.cn/thread-1-1-1.html
  
    
    
  
  
    
    
  


精选文章正文

上个星期的文章主要是对php底层与内核的学习,从弱语言学习到生命周期,内存与垃圾回收,其实还有更多的内核需要探究,更多的还是需要大家自主的学习与扩展,这样才能全面的学习。我这里主要是总结了必要学习的底层知识。考核的时候也是经常会被问起。


一、如何理解php是弱类型语言

1.从变量角度:在声明一个变量不需要声明其类型,这事PHP的特色,因为他交给了底层。

底层的变量存储是在一个zval结构里,声明一个变量会把所有类型都考虑到并开辟空间,同种类型默认用最大限度声明(int用long,float用double),这样绝对满足的所有变量的需求。


2.从运算的角度:底层会根据你当前变量类型做转换并运算,并且返回结果做类型转换(string+string=int,float+string=float,sting('')==int0...);数组也可以加减参与运算;


详细的文章可以查看:

视频教程可查看:http://www.mano100.cn/thread-93-1-1.html



二、php生命周期

主要分为3个阶段,开始阶段,运行阶段,结束阶段

开始阶段:

1.module_init: 初始化全局变量,引入standard标准库,加载php.ini。

启动apache就经历一次;加了dll或.so扩展,php.ini发生改变,重启nginx或apache的原因;


2.request_init:对全局变量赋值,激活zend引擎。


运行阶段:

3.run:词法分析-语法分析-opcode

访问脚本,程序员们最熟悉的步骤了,你写的代码。


结束阶段:

4.request_shutdown:销毁使用的函数变量,回收内存

碰到die or exit自动进入此阶段并且调用析构方法 


5.module_shutdown:各模块最后一次释放内存


详细的文章教程可查看:

视频教程可查看:http://www.mano100.cn/thread-93-1-1.html



三、变量的分离改变

变量8种类型:int ,string ,array, float ,bool, null ,resource ,object。


存储在zval_value(存储变量的值)zval_struct(存储变量的类型引用等)。


写时分离:PHP在修改一个变量以前,会首先查看这个变量的refcount,如果refcount大于1,PHP就会执行一个分离的例程.【recount -=1】


写时改变:如果是一个引用的赋值,那会发生写实改变 【is_ref 由0->1】


详细的文章教程可查看:

视频教程可查看:http://www.mano100.cn/thread-93-1-1.html



四、内存与垃圾回收

内存:

 1.内存是一次性申请:在sapi周期request_init,向系统申请内存,ZendMM向系统进行的内存申请,并不是有需要时向系统即时申请, 而是由ZendMM的最底层(heap层)先向系统申请一大块的内存, 建立一个类似于内存池的管理机制。


 2.用完后不释放:在sapi运行阶段,及时unset变量内存也不马上释放,而是归还heap堆层,将内存复用,避免多次内存申请和释放所带来性能消耗。


 3.统一释放:在sapi周期request_shutdown阶段,统一销毁释放内存。


 4.内存配置:在php.ini配置,memory_limit=32M


垃圾回收:

 1.php5.3以前,引用计数回收机制,变量都有recount的参数,当为0时判断无可用,回收。存在问题:内存泄漏怎么办?


 2.php5.3以后,引用计数的基础上,加入了一个复杂的垃圾回收算法(不用了解),每发生一次内存泄漏可能操作时,记录到【根缓冲区】,到了10000执行一次算法,清理这里边的垃圾。


 3.效果:复杂的算法固然会有时间消耗,增加了6~7%,但是产生的回收机制节约可98.3%的内存,利大于弊。


详细文章教程请查看:




视频教程可查看:http://www.mano100.cn/thread-93-1-1.html



五、命名空间

作用:定义了不同的空间,解决了类,函数等名字的冲突

本质:比较简单,php底层会将 命名空间与定义函数名以\结合的形式展现,不就不重名了嘛


详细文章教程可查看:





以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持 php自学中心 ,学习与交流少不了一个圈子,点击加技术群:



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《PHP底层你要学习哪些内容【回顾与总结】》的版权归原作者「PHP自学中心」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注PHP自学中心微信公众号

PHP自学中心微信公众号:phpCenter

PHP自学中心

手机扫描上方二维码即可关注PHP自学中心微信公众号

PHP自学中心最新文章

精品公众号随机推荐