2013-03-03 90 views
0

我需要为类(不是对象)分配一个变量。我知道在其他编程语言(如Java)中这很简单,但我无法在PHP中找到实现这一点的方法。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 
+1

为什么你需要这个?也许有一种更习惯的方式来实现你想要的, – troelskn 2013-03-03 22:37:30

+0

我正在编写一个小型库,我需要访问常量并在给定的类和运行时调用静态方法。上面的例子是解释我的问题的最简单的方法。 – Augusto 2013-03-03 22:44:11

回答

0

我发现您可以像引用一样处理任何r egular String。以下似乎是最简单的方法。

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

class Y{ 
    const MESSAGE="HELLO"; 

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

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

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

3

在PHP中你不能存储在变量的类的引用。所以你存储一个字符串类的名称,并使用constant()功能

class Y{ 

    const MESSAGE = "HELLO"; 

} 

class X{ 

    public $foo = 'Y'; 

} 

$xInstance = new X(); 
echo constant($xInstance->foo . '::MESSAGE'); 
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来模拟此行为,并有权访问由用户定义的方法处理的属性或静态属性