有个文件是记录错误码的静态类文件,放在support文件夹下面,命名空间是support/ErrorCode,当ErrorCode文件修改时,可以看到触发了reload,但是实际上新增的静态属性并不能访问,只有在restart后才能正常访问。
<?php
namespace support;
/**
*
*/
class ErrorCode
{
/**
* 系统错误
* @start 1000
*/
const KeyMissing = 10000000;
}
比如在ErrorCode.php文件新增:
const SystemError = 10000001;
webman.log会记录:
/path/project/support/ErrorCode.php update and reload,
Workerman[start.php] reloading
访问时:
Undefined constant support\\ErrorCode::SystemError
webman:1.5.19
php:8.0
因为这个文件在
worker 进程
创建之前被加载了,reload
的worker 进程
必然也继承自父进程,任你如何reload
也不会发生任何变化,除非重启父进程。他们所谓的热重启无一例外的都是在
worker start
之后include/require
将会发生变化的文件。感谢回复,如果这个文件如果是不可以热加载的话,为什么框架需要监控呢?另外我另外一个项目其实同样的位置同样文件是可以热重载的,所以我就有点困惑了。
因为伟大的 composer 采用 PHP 特有的惰性加载(autoload),当你在主进程使用这个类常量
ErrorCode::KeyMissing
,那这个类就被autoload了,同时这个类文件也被加载了,你的另一个项目同样位置同样文件可以热重载,说明你没有在主进程引入该类的类常量、类静态变量、调用类静态方法或者实例化类。再劳烦问一下,我另一个项目的使用方式其实是一样的,所以我应该怎么判断我是否在主进程引入该类的类常量、类静态变量、调用类静态方法或者实例化类呢?
在workerstart里面判断一下
感谢,找到原因了~因为在一个插件的配置项里引入了这个ErrorCode类,所以像你所说的,插件配置是autoload的,所以不会热重载了。