国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman觸發(fā)reload后文件沒(méi)有更新

xianjinrenshi

問(wèn)題描述

有個(gè)文件是記錄錯(cuò)誤碼的靜態(tài)類文件,放在support文件夾下面,命名空間是support/ErrorCode,當(dāng)ErrorCode文件修改時(shí),可以看到觸發(fā)了reload,但是實(shí)際上新增的靜態(tài)屬性并不能訪問(wèn),只有在restart后才能正常訪問(wèn)。

程序代碼或配置

<?php

namespace support;

/**
 *
 */
class ErrorCode
{

    /**
     * 系統(tǒng)錯(cuò)誤
     * @start 1000
     */
    const KeyMissing = 10000000;
}

重現(xiàn)問(wèn)題的步驟

比如在ErrorCode.php文件新增:

const SystemError = 10000001;

webman.log會(huì)記錄:

/path/project/support/ErrorCode.php update and reload,
Workerman[start.php] reloading

訪問(wèn)時(shí):

Undefined constant support\\ErrorCode::SystemError

操作系統(tǒng)環(huán)境及workerman/webman等具體版本

webman:1.5.19
php:8.0

945 1 0
1個(gè)回答

胡桃

因?yàn)檫@個(gè)文件在 worker 進(jìn)程創(chuàng)建之前被加載了,reloadworker 進(jìn)程必然也繼承自父進(jìn)程,任你如何 reload 也不會(huì)發(fā)生任何變化,除非重啟父進(jìn)程。

他們所謂的熱重啟無(wú)一例外的都是在 worker start 之后 include/require 將會(huì)發(fā)生變化的文件。

  • xianjinrenshi 2024-07-19

    感謝回復(fù),如果這個(gè)文件如果是不可以熱加載的話,為什么框架需要監(jiān)控呢?另外我另外一個(gè)項(xiàng)目其實(shí)同樣的位置同樣文件是可以熱重載的,所以我就有點(diǎn)困惑了。

  • 胡桃 2024-07-19

    因?yàn)閭ゴ蟮?composer 采用 PHP 特有的惰性加載(autoload),當(dāng)你在主進(jìn)程使用這個(gè)類常量 ErrorCode::KeyMissing,那這個(gè)類就被autoload了,同時(shí)這個(gè)類文件也被加載了,你的另一個(gè)項(xiàng)目同樣位置同樣文件可以熱重載,說(shuō)明你沒(méi)有在主進(jìn)程引入該類的類常量、類靜態(tài)變量、調(diào)用類靜態(tài)方法或者實(shí)例化類。

  • xianjinrenshi 2024-07-19

    再勞煩問(wèn)一下,我另一個(gè)項(xiàng)目的使用方式其實(shí)是一樣的,所以我應(yīng)該怎么判斷我是否在主進(jìn)程引入該類的類常量、類靜態(tài)變量、調(diào)用類靜態(tài)方法或者實(shí)例化類呢?

  • 胡桃 2024-07-19

    在workerstart里面判斷一下

    $classLoaded = in_array(ClassName::class, get_declared_classes(), true);
  • xianjinrenshi 2024-07-19

    感謝,找到原因了~因?yàn)樵谝粋€(gè)插件的配置項(xiàng)里引入了這個(gè)ErrorCode類,所以像你所說(shuō)的,插件配置是autoload的,所以不會(huì)熱重載了。

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??