首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP strtr Catchable Fatal Error:Object of class variant could not be converted to string 解決方案

     編輯:PHP 相關知識

錯誤訊息

Catchable fatal error: Object of class variant could not be converted to string in ... on line 160
return $tab1.strtr($content, array('>'=>'>', '<'=>'<', ...));

根本原因

$content 不是字串,而是一個物件(可能是 COM Variant 物件或自定類別實例)。PHP 5/7 中,strtr() 要求第一參數為字串,物件無法隱性轉換為字串,除非該類別實作 __toString() 魔術方法。

解決方法

方法 1:確保傳入字串(推薦)

<?php
// 呼叫端
$content = (string)$content; // 強制轉型
// 或
$content = $content->getContent(); // 若物件有取值方法

// 函式內部防禦
function encode($content, $type='Element', $tab1='', $br='') {
    if (is_object($content)) {
        if (method_exists($content, '__toString')) {
            $content = (string)$content;
        } elseif (method_exists($content, 'getContent')) {
            $content = $content->getContent();
        } else {
            throw new InvalidArgumentException('content must be string or stringable object');
        }
    }
    // ... 後續邏輯
}

方法 2:在類別實作 __toString()

<?php
class MyContent {
    private $data;
    public function __construct($data) { $this->data = $data; }
    public function __toString() { return $this->data; }
}
$obj = new MyContent('test');
echo strtr($obj, ['<' => '<']); // 正常運作

方法 3:COM Variant 物件處理

若 $content 來自 com_dotnet 擴充(如讀取 Word/Excel),需取值:

$content = $variant->value; // 或 $variant->GetValue()

除錯技巧

var_dump($content); // 確認型別
// 輸出範例:object(variant)#1 (0) { }  或  object(MyClass)#2 (1) { ["data"]=> string(10) "hello" }

結語

strtr() 不接受物件參數。遇到此錯誤,請先 var_dump() 確認變數型別,再依來源決定「強制轉型」、「呼叫取值方法」或「實作 __toString()」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved