self和satic 在 php 的面向对象编程中,总会遇到: class test{ public static function test(){ self::func(); static::func(); } public static function func(){} } 可你知道 self 和 static 的区别么? 其实区别很 2020-12-09 PHP > 基础 #PHP
PHP7新特性 太空船操作符 <=>用于比较两个表达式,返回-1、0、1 类型声明以前函数传入参数和返回数据都是不需要限制类型的。 php7 中可以通过修改declare(strict_types=1);开启严格模式。开启后,如果规定了类型,就必须满足对应的类型,否则报错。 常量数组常量数组是不可以数组 namespace 批量导入throwable 接口Closure::call()int 2020-12-09 PHP > 基础 #PHP
composer 中文网站:https://pkg.phpcomposer.com/ composer.json 中记录开发者主动安装的包, composer.lock 中除了记录 composer.json 中记录的包之外, 还记录 composer.json 中记录的包的依赖和依赖的依赖等等; 所以说 composer.lock 中记录的是最全的 windows 下安装 composer 找到并进入 PHP 的 2020-12-09 PHP > 基础 #PHP
协程 python 中的协程协程,又称微线程。 def Fn(): i = 0 while i < 5: yield i i ++ f = Fn() next(f) next(f) 协程就是通过 yield 关键字返回数据,然后中断函数执行,处理返回的数据,之后使用 next()激活函数,继续执行。 函数每次执行都需要激活,第一次也不例外,除了可 2020-12-09 PHP > 基础 #PHP
使用cURL实现Get和Post请求的方法 cURL 是一个利用 URL 语法规则来进行传输文件和数据的工具。PHP 也支持 cURL 库。 在 PHP 中建立 cURL 请求的基本步骤 初始化 curl_init() 设置变量 curl_setopt() 执行并获取结果 curl_exec() 释放 cURL 句柄 curl_close() /** * @param $url * @param int $type 0 get 1 p 2020-12-09 PHP > 基础 #PHP
匿名函数use 参考:https://blog.csdn.net/echojson/article/details/80633118 use 的意思是连接闭包和外界变量。 匿名函数中的 use,其作用就是从父作用域继承变量。 如果想影响到外部相应的变量,需要&,当变量是对象 object 时,可以不使用&。 2020-12-09 PHP > 基础 #PHP
理解session和cookie session 和 cookie 存在的目的是为了解决 http 协议的无状态 PHP 的 session 机制工作过程大致是这样的: 当客户端浏览器向服务器发起一个请求的时候,服务器会检查请求数据包头部中的“Cookie”字段是否包含名称为PHPSESSID的变量, 这个名称可以通过 php.ini 中的 session.name 自定义,默认是 PHPSESSID,比如 https://nb 2020-12-09 PHP > 基础 #PHP
$_SERVER['SCRIPT_FILENAME']与__FILE__ 的区别 二者都表明了本文件的绝对路径,区别在于: $_SERVER[‘SCRIPT_FILENAME’]指向当前执行脚本的绝对路径; __FILE__指向当前文件的绝对路径;也就是写在哪个文件里就是哪里。 示例:a.php 中引用了 b.php 文件: b.php 文件中的$_SERVER[‘SCRIPT_FILENAME’]指向 a.php,__FILE__就还是指向 b.php 总结: 所有的情况都用 2020-12-09 PHP > 基础 #PHP
GatewayWorker 三个类: Register、Gateway、BusinessWorker 工作原理: Register、Gateway、BusinessWorker 三个进程启动 Gateway、BusinessWorker 进程启动后向 Register 服务进程发起长链接注册自己 Register 服务收到 Gateway 的注册后,把所有 Gateway 的通讯地址保存在内存中 Register 服务收到 2020-12-09 PHP > Workerman #Workerman
(int32_t)4294967294 注: int 是有符号、unsigned int 是无符号; gdb 调试数组的时候, nTableMask = 4294967294, 因为 nTableMask 是 unsigned int 类型, 所以使用(int)4294967294 转成 int 后结果是 2; 那为什么是 2 呢? 因为 unsigned int 和 int 之间的转化是按照实际存储的二进制进行转换的, 转换 2020-12-09 PHP > 源码 #源码
数组_zend_array zend_array 和 HashTable 都是 _zend_array 结构体的别名。 185 struct _zend_array { 186 zend_refcounted_h gc; // 垃圾回收相关 187 union { 188 struct { 189 ZEND_ENDIAN_LOHI_4( 1 2020-12-09 PHP > 源码 #源码
gc 数组初始化$arr = [1,2,3];,打印 gc 发现 refcount=2; 数组初始化$arr = ['time'=>time()];, 打印 gc 发现 refcount=1; 这是为什么呢? 这牵扯到 PHP7 中的另一个概念,叫做 immutable array (不可变数组),在不可变数组下,使用一个伪计数值 2。类型是这种直接申明规定数组 2020-12-09 PHP > 源码 #源码
字符串_zend_string 写时复制: $a = 'this is string'; $b = $a; 此时,$a和$b 在内存中指向同一地址, 当修改$a或者$b 的时候, 才会复制一份, 然后对复制的这份进行修改 146 typedef struct _zend_refcounted_h { 147 uint32_t refcount; /* reference co 2020-12-09 PHP > 源码 #源码
引用类型_zend_reference <?php $a = "string"; $b = &$a; echo $a; echo $b; $b = "hello!"; echo $a; echo $b; unset($b); echo $b; echo $a; 4、5 行输出$a和$b 都是引用类型,$b引用$a,但是$a也会变成引用类型 zend_reference,$a 和$b 的 zval 都指向同一个 zen 2020-12-09 PHP > 源码 #源码
小而巧的zval zval 是一个结构体,其中包含三个联合体(共同体):value、u1、u2;vaule8 字节,u1 和 u2 都是 4 个字节,正好 8 字节对其,所以 zval 的大小是 16 字节。 zval 用 16 字节可以表示 PHP 中的任意一个变量。 如何表示的呢? line84 typedef struct _zval_struct zval; 为_zval_struct 这个结构体定义别名为 2020-12-09 PHP > 源码 #源码
如何一眼就看出内存多大 通过内存地址快速知道内存大小通过内存管理申请一个内存地址,这个内存地址属于 small 或 large 或 huge 内存,那如何判断呢? page 4KB chunk 2MB small 小于等于 3KB 的内存。 large 大于 3KB 且小于等于(2MB-4KB)的内存,可以对应整数倍的 page。 huge 大于 2MB-4KB 的内存,可以对应整数倍的 chunk。 如果是 0x8 打 2020-12-09 PHP > 源码 #源码
内存管理 malloc 函数申请内存, 返回指针; free 释放内存 void * ptr = malloc(size); free(ptr) 问题: 申请内存的时候需要传入 size, 为什么 free 的时候没有传入 size, 那么是怎么做到准确释放 size 大小的内存的呢? 其实呢, malloc 在分配内存的时候, 返回的地址的指针指向了程序可用内存的位置, 在 ptr 前面会多分配 32 2020-12-09 PHP > 源码 #源码
大小端 参考链接:https://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html 大端 => 高尾端 小端 => 低尾端 计算机系统中,以字节为单位,每个地址单元都对应这一个字节,一个字节为 8bit。 大端:(Big-Endian):就是把数值的高位字节放在内存的低位地址上,把数值的低位字节放在内存的 2020-12-09 PHP > 源码 #源码
正向代理和反向代理 正向代理和反向代理的本质区别是是什么? https://www.zhihu.com/question/36412304 正向代理:客户机必须指定代理服务器,并将本来要直接发送到 Web 服务器上的 http 请求发送到代理服务器中 反向代理:代理服务器接受 Internet 上的连接请求,然后将请求转发给内部网络的服务器;并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代 2020-12-09 运维 > LVS #LVS
mysql5.7 datetime 默认值为'0000-00-00 000000'无法创建 我数据库版本为 5.7.16 新建表结构: DROP TABLE IF EXISTS `yx_test`; CREATE TABLE `yx_test` ( `mobile` char(11) NOT NULL DEFAULT '' COMMENT '手机号', `is_delete` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态, 2020-12-07 运维 > MySQL #MySQL