使用pthreads的PHP多线程,类没有在Thread实例中加载

 Reaki是睿睿 发布于 2023-02-08 16:09

所以我使用pthreads来异步写入MongoDB(我想尝试React但它不支持PUT和POST HTTP方法)但是在使用Thread类时我遇到了一个问题.出于某种原因,当我将代码放在__construct()和run()方法中时,执行它会给出一个错误,即找不到某些类.我正在使用相同的Composer自动加载器,并且在我不使用Threading API时没有问题.关于它为什么会发生的任何想法?

validator = new MongoFileSystemValidator(1024 * 1024 * 1024 * 2); //the maximum size set to 2GB
        // Simple path resolver, where uploads will be put
        $this->pathResolver = new FileUpload\PathResolver\Simple($folderPath);
        // The machine's filesystem
        $this->fileSystem = new MongoFS($mongoFS);

        // FileUploader itself

        $this->fileUpload = new FileUpload\FileUpload($_FILES['files'], $_SERVER);
        //var_dump(get_declared_classes());
        $this->fileUpload->setPathResolver($this->pathResolver);
        $this->fileUpload->setFileSystem($this->fileSystem);
        $this->fileUpload->addValidator($this->validator);
      } catch (Exception $e) {
          echo $e->getMessage();
      }

  }
  public function run()
  {
      $this->result = $this->fileUpload->processAll();
  }
}

所以PHP输出一个错误,说明在我应该加载的时候找不到我在线程中使用的一个类实例的类定义.如果我使用include或require手动导入它,代码会输出另一个错误,指出我正在尝试访问非对象类型变量的方法.

1 个回答
  • 在编写pthreads应用程序时,默认情况下,在创建线程时会继承类,函数和常量表.但是,SPL自动加载机制,因为它实现奇怪 - 核心的一半和一半的 - 必须重置,因为没有理智的方法来从pthreads扩展中操作它.

    解决方案是在:: run中包含自动加载代码,通常是vendor/autoload.php,您应该知道应用程序的此代码的路径.

    TLDR; 类表是可用的,自动加载器不是,包含它...

    除了自动加载器问题,该对象的构造还不健全,请阅读:https://gist.github.com/krakjoe/6437782

    2023-02-08 16:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有