首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

smarty 怎么调用 php类的常量成员

2012-09-18 
smarty 如何调用 php类的常量成员php 内容:?phprequire(libs/Smarty.class.php)class my_class{const

smarty 如何调用 php类的常量成员
php 内容:
<?php
require("libs/Smarty.class.php");
class my_class 
{
const PWD = "gogo";
var $username = "深空";
}
$class_obj = new my_class;
echo $class_obj->username.'<br>';
echo $class_obj::PWD.'<br>';
$smarty->assign('class_obj', $class_obj);
$smarty->display('eg_4_2.tpl');
?>
tpl内容:
<html>
<body>
 {$class_obj->username}<br>
 {$class_obj::PWD}<br>
</html>
</body>

对于$class_obj->username
在 php 和 tpl 两边使用都正常。。。

对于$class_obj::PWD
在php使用就正常
在tpl使用就报错

请熟悉的指点下,谢谢!

[解决办法]
您需要遵守 smarty 的规则,否则将被 smarty 开除
[解决办法]
http://wenku.baidu.com/view/c2aa98ef551810a6f52486af.html
[解决办法]
试下 my_class::PWD

还不行看这里
http://www.smarty.net/docs/en/advanced.features.static.classes.tpl
[解决办法]
把类名传过去。$smarty->assign('my_class', my_class);
tpl调用:
{php}
echo my_class::PWD;
{/php}
PHP 5.3.0之后才可以用 $class_obj::PWD 调用。之前的版本是不能的。不知道你php版本是多少?
[解决办法]
还在纠结啊,按我那种方法试了吗? 哪里不行?
[解决办法]
不知道你在纠结什么:

PHP code
<?phpclass C{  const AAA = "This is const<br>";}$obj = new C();$a = C::AAA; $smarty->assign("A",$a); $smarty->assign("str1",$str1); $smarty->assign("str2",$str2); $smarty->display("test.html");?>
[解决办法]
我是看明白了。但我无能为力。
[解决办法]
$smarty->assign("str1",$str1);
 $smarty->assign("str2",$str2);
为测试数据,没用,删掉
[解决办法]
理解你的需求, 很有可能smarty还没有收到这方面的需求,
所以也没有做出这个功能,你完全可以上他们的网站提下这个需求,
或者自己写个plugin

探讨

引用:

试下 my_class::PWD

还不行看这里
http://www.smarty.net/docs/en/advanced.features.static.classes.tpl


看了你给的链接
链接里讲的是 静态类

而我的问题是 类的静态成员。。。
还是要谢谢你们的回答。。。

[解决办法]
这么无理的需求也提?开发的时候要变通
[解决办法]
还在纠结这个问题吗?

{$class_obj::PWD}<br>
被翻译成了
<?php echo $_smarty_tpl->tpl_vars['class_obj']->value::PWD;?>
<br>

虽然
$class_obj = new my_class;
echo $class_obj->username.'<br>';
echo $class_obj::PWD.'<br>';
可以得到正确的结果(但他是不严密的)

但这样呢?
$class_obj->x = new my_class;
echo $class_obj->x->username.'<br>'; //这里能输出 深空
echo $class_obj->x::PWD.'<br>';//这里就要报错了:
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ',' or ';' in 

[解决办法]
我查过手册,只有变量可以那样传值,常量不能这样传值!!
只能这样:
php:$PWD=$class_obj::PWD; $smarty->assign("PWD",$PWD);

tpl:{$PWD}
------解决方案--------------------


探讨

我查过手册,只有变量可以那样传值,常量不能这样传值!!
只能这样:
php:$PWD=$class_obj::PWD; $smarty->assign("PWD",$PWD);

tpl:{$PWD}

[解决办法]
哥们,我同意这不算"无理需求", 
如果你只是想用,那么楼上已经提出了很多变通方法可以使用.
如果你是想把这个问题搞清楚,我觉得在楼上这么多人回复的情况下,
已经基本可以认为,smarty没有提供此方法,或者我们都不知道
所以,
1.你完全可以自己研究下源码,看看是否真的没有方法,
2.或者可以和smarty社区联系一下,证实有或没有此方法,smart的网站我上面已经给出.
3.如果证实没有此方法,你可以向smarty提需求,或者自己写plugin
所有的开源软件都是根据社区的需求开发的,没有人提需求,就没有人写相应的代码,
所以,提出你的需求而不是认为"肯定有办法"



探讨
这不叫无理需求吧
smarty 能调用 php 的普通类成员,
按道理也应该可以 调用 php 的类常量成员啊??
请问这不合理吗??

引用:

这么无理的需求也提?开发的时候要变通

[解决办法]
没问题。
在3.1有个registerClass方法,模板中访问类属性就像在php操作一样:
HTML code
php 内容:<?phprequire("libs/Smarty.class.php");class my_class  {    const PWD = "gogo";    var $username = "深空";}$smarty = new Smarty;$smarty->registerClass('CLA', 'my_class');$smarty->display('eg_4_2.tpl');?>tpl内容:<html><body> {CLA::$username}<br> {CLA::PWD}<br></html></body>
[解决办法]
鼓掌!

探讨

没问题。
在3.1有个registerClass方法,模板中访问类属性就像在php操作一样:
HTML code

php 内容:
<?php
require("libs/Smarty.class.php");
class my_class {
const PWD = "gogo";
var $username = "深空";
}
$smarty = new Smarty……

[解决办法]
探讨

鼓掌!

引用:

没问题。
在3.1有个registerClass方法,模板中访问类属性就像在php操作一样:
HTML code

php 内容:
<?php
require("libs/Smarty.class.php");
class my_class {
const PWD = "gogo";
var $username = "深空";
……

[解决办法]
探讨

引用:

鼓掌!

引用:

没问题。
在3.1有个registerClass方法,模板中访问类属性就像在php操作一样:
HTML code

php 内容:
<?php
require("libs/Smarty.class.php");
class my_class {
const PWD = "gogo";
var $……

热点排行