Home >Backend Development >PHP Tutorial >PHP self::$abc,如果$abc是一个拼凑变量,怎么办?

PHP self::$abc,如果$abc是一个拼凑变量,怎么办?

WBOY
WBOYOriginal
2016-06-06 20:25:341461browse

<code>class Errors extends Object
{
    public static $message, $code;

    const SYSTEM_CODE = 'system';
    const SYSTEM_MESSAGE = 'system error';
        
    public static function set($code, $params = [])
    {
        $error_code = strtoupper($code) . '_CODE';
        $error_message = strtoupper($code) . '_MESSAGE';
        echo self::$error_message;
    }
}
</code>

Errors::set('system');
echo self::$error_message报错。

回复内容:

<code>class Errors extends Object
{
    public static $message, $code;

    const SYSTEM_CODE = 'system';
    const SYSTEM_MESSAGE = 'system error';
        
    public static function set($code, $params = [])
    {
        $error_code = strtoupper($code) . '_CODE';
        $error_message = strtoupper($code) . '_MESSAGE';
        echo self::$error_message;
    }
}
</code>

Errors::set('system');
echo self::$error_message报错。

下面的内容是 @Tranch 这位朋友找到的.
我只是转过来.

有两种方式:
第一种是:

<code class="php"><?php class AA{
   const BB = "HelloWorld";
   const CC = "HelloWorld";

    public static function set($code){
        echo constant('self::' . $code);
    }
}

$key = 'BB';

AA::set($key);

$key = 'CC';
AA::set($key);</code></code>

constant 函数说明

另一种是

<code><?php class AA{
   const BB = "HelloWorld";
}

$key = 'BB';

$f = new ReflectionClass('AA');

echo $f->getConstant($key);
</code>

echo self::{$error_message}

不太明白什么意思,不过。。。
//为什么要这么写呢?
echo self::$error_message;
//为什么不这么写?
echo $error_message;

你的$error_message并不是类属性啊,当然报错了,你直接echo $error_message,不就可以了,那个又不是类属性。

试试在你拼凑的变量外面加上一个{}

比如

<code>class A{
    public $attr_a = 'value_a';
}

$t=new A();
$attr = 'attr_a';
echo $t->{$attr};
</code>

只试过引用普通变量,没试过静态变量,手机没发调试,楼主自己试试看。

这样写
echo constant('self::' . $error_message);

<code>echo self::$error_message;</code>

改成

<code>echo $error_message;</code>

$error_message不是静态变量

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn