0

我需要将一个类(不是对象)分配给一个变量。我知道这在其他编程语言(如 Java)中非常简单,但我找不到在 PHP 中完成此操作的方法。

这是我正在尝试做的一个片段:

class Y{

    const MESSAGE = "HELLO";

}

class X{

    public $foo = Y; // <-- I need a reference to Class Y

}

$xInstance = new X();
echo ($xInstance->foo)::MESSAGE; // Of course, this should print HELLO
4

3 回答 3

3

在 php 中,您不能将对类的引用存储在变量中。所以你存储一个带有类名的字符串并使用constant()函数

class Y{

    const MESSAGE = "HELLO";

}

class X{

    public $foo = 'Y';

}

$xInstance = new X();
echo constant($xInstance->foo . '::MESSAGE'); 
于 2013-03-03T22:34:45.607 回答
0

您可以使用反射来找到它(请参阅Can I get CONST's defined on a PHP class?),或者您可以使用如下方法:

<?php

class Y
{
    const MESSAGE = "HELLO";
}

class X
{
    function returnMessage()
    {
        return constant("Y::MESSAGE");
    }
}

$x = new X();
echo $x->returnMessage() . PHP_EOL;

编辑 - 还值得指出的是,您可以使用重载来模拟这种行为并可以访问由用户定义的方法处理的属性或静态属性

于 2013-03-03T22:36:55.330 回答
0

我发现您可以像处理任何常规字符串一样处理对类的引用。以下似乎是最简单的方法。

注意:在以下代码段中,我对问题中显示的代码段进行了一些修改,以使其更易于阅读。

class Y{
    const MESSAGE="HELLO";

    public static function getMessage(){
        return "WORLD";
    }

}
$var = "Y";
echo $var::MESSAGE;
echo $var::getMessage();

这提供了一个统一的机制来访问常量和/或静态字段或方法。

于 2013-03-04T01:53:37.630 回答