PHP - 将类作为对象处理

时间:2013-03-03 22:29:51

标签: php oop

我需要为变量分配一个类(不是对象)。我知道在其他编程语言中这很简单,比如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

3 个答案:

答案 0 :(得分:3)

在php中,您无法在变量中存储对类的引用。因此,您存储具有类名的字符串并使用constant()函数

class Y{

    const MESSAGE = "HELLO";

}

class X{

    public $foo = 'Y';

}

$xInstance = new X();
echo constant($xInstance->foo . '::MESSAGE'); 

答案 1 :(得分: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;

编辑 - 值得指出您可以使用overloading来模拟此行为,并且可以访问由用户定义的方法处理的属性或静态属性

答案 2 :(得分:0)

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

注意:在下面的代码片段中,我对问题中显示的内容进行了一些修改,只是为了便于阅读。

class Y{
    const MESSAGE="HELLO";

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

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

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