聪明地分配一个界面

时间:2013-08-16 14:40:12

标签: php smarty

我有一个接口,我试图分配给一个smarty变量。在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'   第16行/home/parvhraban/domains/src/www_root/clienttest.php

是否可以从smarty模板访问界面功能?

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

反射类有哪些更好,更原生的解决方案?

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

1 个答案:

答案 0 :(得分:1)

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

通常你必须创建一个类的实例:

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

但是在您的情况下,这将无法正常工作,因为接口无法自行实例化。要访问代码,我认为您需要使用另一个实现此接口的类。

class MyClass implements ServerResponseCodes {}

$smarty->assign("codes", new MyClass);

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