我有一个接口,我正试图将它分配给一个智能变量。在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模板中需要这些值似乎很奇怪。