首页 > 解决方案 > App\Http\Controllers\ConfigClass 类的对象无法转换为字符串

问题描述

我有 2 节课:

namespace App\Http\Controllers;

class ConfigClass  {
    const ERROR_STATUS = 'kod html [[X]] error';
}

二等:

use App\Http\Controllers\ConfigClass;

class StatusMessageClass
{

    public function __construct()
    {
        $this->config = new ConfigClass();
    }

    public function createMessageWithStatus(string $messageType, string $description): array
    {
        $classValue = $this->config.'' . $messageType;
        $html = str_replace("[[X]]", $description, $classValue);
        $message = array(
            'messageType' => $messageType,
            'html' => $html,
            'description' => $description
        );
        return $message;
    }

}

我使用这段代码:

$val = $messageBox->createMessageWithStatus('ERROR_STATUS', "Błędny login lub hasło")

我有错误(App\Http\Controllers\ConfigClass 类的对象无法转换为字符串)

$classValue = $this->config.'' 。$消息类型;

我怎样才能重复这个?

我需要这个结果: $classValue = $this->config::ERROR_STATUS; 但我需要从函数中的 $messageType 获取这个值“ERROR_STATUS”

标签: php

解决方案


不应从实例中检索类常量。

所以你可以得到ConfigClass::ERROR_STATUS但不能$this->config::ERROR_STATUS

一种解决方法是使用get_class()转回$this->configConfigClass然后您可以使用该constant()函数来检索 中的任何常量$messageType

$classValue = constant(get_class($this->config) . '::' . $messageType);

如果您知道您将始终从 中获取常量ConfigClass,则可以使用类名(以及用于变量解释的双引号)来简化此过程:

$classValue = constant("ConfigClass::$messageType");
// you may need the full namespaced class: \App\Html\Controllers\ConfigClass

推荐阅读