我有一个接口,我试图分配给一个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());
答案 0 :(得分:1)
此错误与Smarty无关,也不是Smarty脚本生成它。这是一个PHP语法问题。
通常你必须创建一个类的实例:
$smarty->assign("codes", new Application\ServerResponseCodes);
但是在您的情况下,这将无法正常工作,因为接口无法自行实例化。要访问代码,我认为您需要使用另一个实现此接口的类。
class MyClass implements ServerResponseCodes {}
$smarty->assign("codes", new MyClass);
然而,看到您的问题更新,使用ReflectionClass
似乎是一个更好的选择。我确信有更好的选择,但它需要更多的应用知识。在Smarty模板中需要这些值似乎很奇怪。