巧妙地分配一个接口


smarty assign an interface

我有一个接口,我正试图将它分配给一个智能变量。在Smarty 3中增加了对类冲突的支持,我正试图利用它。

namespace Application;
interface ServerResponseCodes
{
    const FAILURE = 0;
    const SUCCESS = 1;
    const PENDING = 2;
    const INVALID = 3;
}

然后

$smarty->assign("codes", Application'ServerResponseCodes);

抛出错误

致命错误:中未定义的常量"Application''ServerResponseCodes"/home/parraban/domains/src/wwww_root/clienttest.php,第16行

可以从smarty模板访问接口常量吗?

是否存在只能分配初始化对象的限制?

有比反射类更好、更原生的解决方案吗?

$codes = new ReflectionClass ('Application'ServerResponseCodes');
$smarty->assign("codes", $codes->getConstants());

这个错误与Smarty无关,也不是由Smarty脚本生成的。这是一个PHP语法问题。

通常,您必须创建类的实例:

$smarty->assign("codes", new Application'ServerResponseCodes);

然而,在您的情况下,这将不起作用,因为接口不能单独实例化。要访问代码,我认为您需要使用另一个实现此接口的类。

class MyClass implements ServerResponseCodes {}
$smarty->assign("codes", new MyClass);

然而,看到您的问题更新,使用ReflectionClass似乎是一个更好的选择。我确信还有更好的选择,但这需要更多的应用知识。在Smarty模板中需要这些值似乎很奇怪。