PHP的内存回收机制
本篇文章介绍PHP的内存回收机制,帮助我们理解在函数执行结束后,其作用域下的变量是如何释放其内存空间的。 「引用计数」和「Garbage Collector」是内存回收的主要机制,「内存池」部分介绍“回收”这个动作代表的更底层的Zend Engine实现细节。 引用计数 PHP变量的基本单...
本篇文章介绍PHP的内存回收机制,帮助我们理解在函数执行结束后,其作用域下的变量是如何释放其内存空间的。 「引用计数」和「Garbage Collector」是内存回收的主要机制,「内存池」部分介绍“回收”这个动作代表的更底层的Zend Engine实现细节。 引用计数 PHP变量的基本单...
PHP的反射机制是一种强大的工具,它允许程序在运行时检查和操作类、对象、接口、方法、属性等元素。通过反射,你可以动态地创建对象、调用方法、访问属性,甚至可以改变类的行为。 https://www.php.net/manual/zh/book.reflection.php 基本反射类 ReflectionClass:用于获取类的信息,可以实例化一个类并调用其方法。 Reflectio...
曾经听前同事讲过一句话「PHP的精髓是他的数组」。 彼时年龄和经验都尚浅,对这句话体会不是很深。但自从开始写golang,我是越来越怀念PHP数组那种简单、粗暴的,不管三七二十一,拿来直接往里面塞的编码体验了。 于是,便有了这篇探索PHP到底是如何实现这个能够「容纳万物」的数据类型的...
前置学习 如果我问你,PHP拓展的执行效率比PHP原生代码更高吗? 你会不假思索的回答我。是的。 但是,为什么呢?为什么用C/C++开发的拓展效率就一定高呢? 如果你问Chat-GPT4,它会回答: 编译型语言:PHP扩展通常使用C或C++编写,这些都是编译型语言,编译成机器码后执行效率高...
PHP-FPM 1.1 传统Nginx+FPM架构 1.1.1 PHP-FPM 并发模型 图1.1.1 一个HTTP请求的流转过程在网络应用场景下,PHP并没有像Golang那样实现http网络库,而是实现了FastCGI协议,然后与web服务器配合实现了http的处理。 web服务器来处理http请求,然后将解析的结果再通过Fa...
使用引用变量foreach数组,未unset问题 foreach数组是引用传递变量,未unset导致再次foreach末尾元素值被覆盖 https://www.cnblogs.com/sunshineliulu/p/12853531.html in_array严格检查问题(PHP8之前) bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 在 haystack 中搜索 needle,如果第三个参数 strict 的值为 true,则 in_array 函数还会检查...
前言 最近项目需要在Hyperf框架下封装Redis分布式锁,于是基于RedLock算法封装了 RedLock-Hyperf SDK,目前除支持简单对象调用外,也支持在Hyperf框架下通过AOP注解来实现。 基于Redis实现一个分布式锁,相信这对你来说并不是难事。多数人会使用 setnx + expire + del 命令来实现一个简单的分布...
在Hyperf官方文档的服务器要求中提到 Swoole PHP 扩展 >= 4.5,并关闭了 Short Name 并且,在文档的常见问题中也会看到Swoole 短名未关闭这一个tag。 我想问了,那为什么hyperf一定要关闭掉Swoole的协程短名称呢 首先,我们先看一下什么是Swoole的协程短名称 所有的 Swoole\Coroutine 前缀的类名映射为 C...
前置阅读:Hyperf/Crontab使用文档 前置阅读:Hyperf/Process自定义进程使用文档 前置阅读:Hyperf事件机制 写在开头 之前做项目用到了Hyperf/Crontab组件来进行秒级的数据清洗,最近又在做定时任务的拆分,于是就打算过一遍组件源码加深理解,顺便构思一...
composer.json 该文件包含了项目的依赖和其他一些源数据。 { "require": { "monolog/monolog": "1.0.*" } } 版本说明: ~表示版本号只能改变最末尾那段(如果是 ~x.y 末尾就是 y,如果是 ~x.y.z 末尾就是 z) ~1.2.3 代表 1.2.3 <= 版本号 < 1.3.0 ~1.2 代表 1.2 <= 版本号 <2.0 ^表示除了大版本号以外,小版本号和补丁版本号都可以变 ^1.2.3 代表 1.2.3 <= 版本号 < 2.0.0 特殊情况0开头的版本号: ^0.3.0 等于 0.3.0...