php mcv,swolle http mcv设计问题

在 Swoole 的环境下,修改控制器文件后,服务通常需要重启以应用更改。但此问题询问如何在不重启服务的情况下,使更新的控制器类生效。示例代码展示了自动加载类的实现,但未涵盖热更新机制。期待的结果是找到一种方法,在不重启服务时,让 Swoole 能够检测到文件变更并重新加载控制器类。
摘要由CSDN通过智能技术生成

### 问题描述

使用 swoole http 的问题

就是改变了 控制器文件 不重启 怎么还能 才能让类正常使用

比如 index\controller\index类里面的index方法 调用返回 333

然后我修改了 这个文件 让它index方法 返回444

在不重启服务的情况下 怎么 才能释放这个 命名空间

### Swoole版本,PHP版本,以及操作系统版本信息

Swoole 4

php 7

centos7

### 相关代码

```php

//自动加载类

$class_name=str_replace('\\',"//",$class_name);

$file_path= root_dir.DS.$class_name.".php";

if (is_file($file_path) && file_exists($file_path)) {

return include($file_path);

}

$file_path= APP.DS.$class_name.".php";

if (is_file($file_path) && file_exists($file_path)) {

include($file_path);

}

return false;

```

```php

//index.php 文件 第一次加载

namespace index\controller;

use core\controller;

class index extends controller{

public function __construct(){

parent::__construct();

}

public function index(){

return json_encode(array("a11"=>"333"));

}

public function index2(){

$this->assign("home","index12345621方法");

}

}

```

```php

//index.php 文件 希望 第二次加载 但是应为已经声明了所以不会再次加载

namespace index\controller;

use core\controller;

class index extends controller{

public function __construct(){

parent::__construct();

}

public function index(){

return json_encode(array("a11"=>"444"));

}

public function index2(){

$this->assign("home","index12345621方法");

}

}

```

```php

//判断文件是否存在

if (file_exists($controller_file)) {

echo 'get_declared_classes !';

var_dump(get_declared_classes ());

$class_namespacename = "\\" . $module_name . "\\".controller."\\" . $class_name;//模块,控制器,类名称

$class_obj = new $class_namespacename();

if (method_exists($class_obj, $function_name)) {

$http_data=$class_obj->$function_name();

} else {

$http_data = "模块/控制器/方法->" . $module_name . '/' . $controller_name . '/' . $function_name . "不存在!";

}

//判断试图文件是否存在 存在则使用试图

if(empty($http_data) && file_exists($view_file)){

$http_data = $smarty->fetch($view_file);

}

$this->swoole_response->header("Content-Type", "text/html; charset=utf-8");

$this->swoole_response->end($http_data);

unset($class_obj);//使用完成后释放对象

} else {

$this->swoole_response->header("Content-Type", "text/html; charset=utf-8");

$http_data = '

404 文件丢失

';

$this->swoole_response->end($http_data);

}

```

### 你期待的结果是什么?实际看到的错误信息又是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值