You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何让类内方法感知翻译方法抛出的异常并更新状态?

问题原因与解决方案

核心问题

  1. 数组值传递导致修改无效:PHP中数组作为函数参数默认是值传递,你调用translateHTML时传入的$this->status是数组副本,catch块里修改的只是这个副本,完全没触碰到类的原始$status属性。
  2. 键名不匹配:类的$status属性用error键标记错误状态,但catch块里却写了$status['status'] = true,键名对应错误。

解决方案

1. 修改trait中的translateHTML方法

直接访问类的$this->status属性(trait可访问使用它的类的protected属性),同时修正键名:

protected function translateHTML(object $translator, string $content, string $target_language): string {
    if ($target_language == 'en') {
        return $content;
    } 
        
    if ($content):
        try {
            $content_translated = $translator->translateText(
                $content, 
                'en', 
                $target_language, 
                ['tag_handling' => 'html'], 
                ['formality', 'prefer_less'],
                ['split_sentences', 0]
            );
            return $content_translated;
        } catch (Exception $error) {
            // 直接修改类的status属性,键名改为error
            $this->status['error'] = true;
            $this->status['message'] = $error->getMessage();
            return $content;
        }
    endif;

    return $content;
}

2. 更新translatePostContent的调用

不再传递$status参数:

public function translatePostContent(string $content): string {
    $post_language = $this->getPostLanguage($this->post_id);
    $target_language = $post_language['deepl_language_code'];

    return $this->translateHTML($this->translator, $content, 'doesnt-exist');
}

3. 保留原有错误检测方法

类中的hasError和getErrorMessage方法无需修改,它们直接访问类的$this->status属性,现在catch块修改的就是这个属性,能正确检测到错误状态。


补充说明

如果一定要通过参数传递数组,可使用引用传递(在参数前加&),比如:

protected function translateHTML(object $translator, string $content, string $target_language, array &$status): string {
    // ... 其余逻辑不变,catch块修改$status['error'] = true ...
}

但这种方式不如直接访问$this->status清晰,尤其是在trait场景下,直接使用类的属性更符合面向对象设计。

内容的提问来源于stack exchange,提问作者rguttersohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:27:48